3v4l.org

run code in 300+ PHP versions simultaneously
<?php $dateFrom="2014-03-31"; $dateTo="2014-05-16"; { $difference = null; $dateFromElements = split(' ', $dateFrom); $dateToElements = split(' ', $dateTo); $dateFromDateElements = split('-', $dateFromElements[0]); $dateFromTimeElements = split(':', $dateFromElements[1]); $dateToDateElements = split('-', $dateToElements[0]); $dateToTimeElements = split(':', $dateToElements[1]); // Get unix timestamp for both dates $dateFromTimeElements[0] = ($dateFromTimeElements[0] == '') ? 0 : $dateFromTimeElements[0]; $dateFromTimeElements[1] = ($dateFromTimeElements[1] == '') ? 0 : $dateFromTimeElements[1]; $dateFromTimeElements[2] = ($dateFromTimeElements[2] == '') ? 0 : $dateFromTimeElements[2]; $date1 = mktime($dateFromTimeElements[0], $dateFromTimeElements[1], $dateFromTimeElements[2], $dateFromDateElements[1], $dateFromDateElements[2], $dateFromDateElements[0]); $dateToTimeElements[0] = ($dateToTimeElements[0] == '') ? 0 : $dateToTimeElements[0]; $dateToTimeElements[1] = ($dateToTimeElements[1] == '') ? 0 : $dateToTimeElements[1]; $dateToTimeElements[2] = ($dateToTimeElements[2] == '') ? 0 : $dateToTimeElements[2]; $date2 = mktime($dateToTimeElements[0], $dateToTimeElements[1], $dateToTimeElements[2], $dateToDateElements[1], $dateToDateElements[2], $dateToDateElements[0]); if ($date1 > $date2) { return null; } $diff = $date2 - $date1; $days = 0; $hours = 0; $minutes = 0; $seconds = 0; if ($diff % 86400 <= 0) { // there are 86,400 seconds in a day $days = $diff / 86400; } if ($diff % 86400 > 0) { $rest = ($diff % 86400); $days = ($diff - $rest) / 86400; if ($rest % 3600 > 0) { $rest1 = ($rest % 3600); $hours = ($rest - $rest1) / 3600; if ($rest1 % 60 > 0) { $rest2 = ($rest1 % 60); $minutes = ($rest1 - $rest2) / 60; $seconds = $rest2; } else { $minutes = $rest1 / 60; } } else { $hours = $rest / 3600; } } switch ($unit) { case 'd': case 'D': $partialDays = 0; $partialDays += ($seconds / 86400); $partialDays += ($minutes / 1440); $partialDays += ($hours / 24); $difference = $days + $partialDays; break; case 'h': case 'H': $partialHours = 0; $partialHours += ($seconds / 3600); $partialHours += ($minutes / 60); $difference = $hours + ($days * 24) + $partialHours; break; case 'm': case 'M': $partialMinutes = 0; $partialMinutes += ($seconds / 60); $difference = $minutes + ($days * 1440) + ($hours * 60) + $partialMinutes; break; case 's': case 'S': $difference = $seconds + ($days * 86400) + ($hours * 3600) + ($minutes * 60); break; case 'a': case 'A': $difference = array( "days" => $days, "hours" => $hours, "minutes" => $minutes, "seconds" => $seconds ); break; } echo $difference.">>>>>>"; }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 44, Position 2 = 46
Branch analysis from position: 44
1 jumps found. (Code = 42) Position 1 = 48
Branch analysis from position: 48
2 jumps found. (Code = 43) Position 1 = 53, Position 2 = 55
Branch analysis from position: 53
1 jumps found. (Code = 42) Position 1 = 57
Branch analysis from position: 57
2 jumps found. (Code = 43) Position 1 = 62, Position 2 = 64
Branch analysis from position: 62
1 jumps found. (Code = 42) Position 1 = 66
Branch analysis from position: 66
2 jumps found. (Code = 43) Position 1 = 86, Position 2 = 88
Branch analysis from position: 86
1 jumps found. (Code = 42) Position 1 = 90
Branch analysis from position: 90
2 jumps found. (Code = 43) Position 1 = 95, Position 2 = 97
Branch analysis from position: 95
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
2 jumps found. (Code = 43) Position 1 = 104, Position 2 = 106
Branch analysis from position: 104
1 jumps found. (Code = 42) Position 1 = 108
Branch analysis from position: 108
2 jumps found. (Code = 43) Position 1 = 127, Position 2 = 128
Branch analysis from position: 127
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 128
2 jumps found. (Code = 43) Position 1 = 137, Position 2 = 139
Branch analysis from position: 137
2 jumps found. (Code = 43) Position 1 = 142, Position 2 = 170
Branch analysis from position: 142
2 jumps found. (Code = 43) Position 1 = 150, Position 2 = 168
Branch analysis from position: 150
2 jumps found. (Code = 43) Position 1 = 158, Position 2 = 165
Branch analysis from position: 158
1 jumps found. (Code = 42) Position 1 = 167
Branch analysis from position: 167
1 jumps found. (Code = 42) Position 1 = 170
Branch analysis from position: 170
12 jumps found. (Code = 188) Position 1 = 192, Position 2 = 192, Position 3 = 202, Position 4 = 202, Position 5 = 212, Position 6 = 212, Position 7 = 222, Position 8 = 222, Position 9 = 230, Position 10 = 230, Position 11 = 236, Position 12 = 171
Branch analysis from position: 192
1 jumps found. (Code = 42) Position 1 = 236
Branch analysis from position: 236
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 192
Branch analysis from position: 202
1 jumps found. (Code = 42) Position 1 = 236
Branch analysis from position: 236
Branch analysis from position: 202
Branch analysis from position: 212
1 jumps found. (Code = 42) Position 1 = 236
Branch analysis from position: 236
Branch analysis from position: 212
Branch analysis from position: 222
1 jumps found. (Code = 42) Position 1 = 236
Branch analysis from position: 236
Branch analysis from position: 222
Branch analysis from position: 230
1 jumps found. (Code = 42) Position 1 = 236
Branch analysis from position: 236
Branch analysis from position: 230
Branch analysis from position: 236
Branch analysis from position: 171
2 jumps found. (Code = 44) Position 1 = 173, Position 2 = 192
Branch analysis from position: 173
2 jumps found. (Code = 44) Position 1 = 175, Position 2 = 192
Branch analysis from position: 175
2 jumps found. (Code = 44) Position 1 = 177, Position 2 = 202
Branch analysis from position: 177
2 jumps found. (Code = 44) Position 1 = 179, Position 2 = 202
Branch analysis from position: 179
2 jumps found. (Code = 44) Position 1 = 181, Position 2 = 212
Branch analysis from position: 181
2 jumps found. (Code = 44) Position 1 = 183, Position 2 = 212
Branch analysis from position: 183
2 jumps found. (Code = 44) Position 1 = 185, Position 2 = 222
Branch analysis from position: 185
2 jumps found. (Code = 44) Position 1 = 187, Position 2 = 222
Branch analysis from position: 187
2 jumps found. (Code = 44) Position 1 = 189, Position 2 = 230
Branch analysis from position: 189
2 jumps found. (Code = 44) Position 1 = 191, Position 2 = 230
Branch analysis from position: 191
1 jumps found. (Code = 42) Position 1 = 236
Branch analysis from position: 236
Branch analysis from position: 230
Branch analysis from position: 230
Branch analysis from position: 222
Branch analysis from position: 222
Branch analysis from position: 212
Branch analysis from position: 212
Branch analysis from position: 202
Branch analysis from position: 202
Branch analysis from position: 192
Branch analysis from position: 192
Branch analysis from position: 165
1 jumps found. (Code = 42) Position 1 = 170
Branch analysis from position: 170
Branch analysis from position: 168
12 jumps found. (Code = 188) Position 1 = 192, Position 2 = 192, Position 3 = 202, Position 4 = 202, Position 5 = 212, Position 6 = 212, Position 7 = 222, Position 8 = 222, Position 9 = 230, Position 10 = 230, Position 11 = 236, Position 12 = 171
Branch analysis from position: 192
Branch analysis from position: 192
Branch analysis from position: 202
Branch analysis from position: 202
Branch analysis from position: 212
Branch analysis from position: 212
Branch analysis from position: 222
Branch analysis from position: 222
Branch analysis from position: 230
Branch analysis from position: 230
Branch analysis from position: 236
Branch analysis from position: 171
Branch analysis from position: 170
Branch analysis from position: 139
Branch analysis from position: 106
2 jumps found. (Code = 43) Position 1 = 127, Position 2 = 128
Branch analysis from position: 127
Branch analysis from position: 128
Branch analysis from position: 97
2 jumps found. (Code = 43) Position 1 = 104, Position 2 = 106
Branch analysis from position: 104
Branch analysis from position: 106
Branch analysis from position: 88
2 jumps found. (Code = 43) Position 1 = 95, Position 2 = 97
Branch analysis from position: 95
Branch analysis from position: 97
Branch analysis from position: 64
2 jumps found. (Code = 43) Position 1 = 86, Position 2 = 88
Branch analysis from position: 86
Branch analysis from position: 88
Branch analysis from position: 55
2 jumps found. (Code = 43) Position 1 = 62, Position 2 = 64
Branch analysis from position: 62
Branch analysis from position: 64
Branch analysis from position: 46
2 jumps found. (Code = 43) Position 1 = 53, Position 2 = 55
Branch analysis from position: 53
Branch analysis from position: 55
filename:       /in/F3L5H
function name:  (null)
number of ops:  239
compiled vars:  !0 = $dateFrom, !1 = $dateTo, !2 = $difference, !3 = $dateFromElements, !4 = $dateToElements, !5 = $dateFromDateElements, !6 = $dateFromTimeElements, !7 = $dateToDateElements, !8 = $dateToTimeElements, !9 = $date1, !10 = $date2, !11 = $diff, !12 = $days, !13 = $hours, !14 = $minutes, !15 = $seconds, !16 = $rest, !17 = $rest1, !18 = $rest2, !19 = $unit, !20 = $partialDays, !21 = $partialHours, !22 = $partialMinutes
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   ASSIGN                                                   !0, '2014-03-31'
    5     1        ASSIGN                                                   !1, '2014-05-16'
    8     2        ASSIGN                                                   !2, null
    9     3        INIT_FCALL_BY_NAME                                       'split'
          4        SEND_VAL_EX                                              '+'
          5        SEND_VAR_EX                                              !0
          6        DO_FCALL                                      0  $26     
          7        ASSIGN                                                   !3, $26
   10     8        INIT_FCALL_BY_NAME                                       'split'
          9        SEND_VAL_EX                                              '+'
         10        SEND_VAR_EX                                              !1
         11        DO_FCALL                                      0  $28     
         12        ASSIGN                                                   !4, $28
   11    13        INIT_FCALL_BY_NAME                                       'split'
         14        SEND_VAL_EX                                              '-'
         15        CHECK_FUNC_ARG                                           
         16        FETCH_DIM_FUNC_ARG                               $30     !3, 0
         17        SEND_FUNC_ARG                                            $30
         18        DO_FCALL                                      0  $31     
         19        ASSIGN                                                   !5, $31
   12    20        INIT_FCALL_BY_NAME                                       'split'
         21        SEND_VAL_EX                                              '%3A'
         22        CHECK_FUNC_ARG                                           
         23        FETCH_DIM_FUNC_ARG                               $33     !3, 1
         24        SEND_FUNC_ARG                                            $33
         25        DO_FCALL                                      0  $34     
         26        ASSIGN                                                   !6, $34
   13    27        INIT_FCALL_BY_NAME                                       'split'
         28        SEND_VAL_EX                                              '-'
         29        CHECK_FUNC_ARG                                           
         30        FETCH_DIM_FUNC_ARG                               $36     !4, 0
         31        SEND_FUNC_ARG                                            $36
         32        DO_FCALL                                      0  $37     
         33        ASSIGN                                                   !7, $37
   14    34        INIT_FCALL_BY_NAME                                       'split'
         35        SEND_VAL_EX                                              '%3A'
         36        CHECK_FUNC_ARG                                           
         37        FETCH_DIM_FUNC_ARG                               $39     !4, 1
         38        SEND_FUNC_ARG                                            $39
         39        DO_FCALL                                      0  $40     
         40        ASSIGN                                                   !8, $40
   17    41        FETCH_DIM_R                                      ~43     !6, 0
         42        IS_EQUAL                                                 ~43, ''
         43      > JMPZ                                                     ~44, ->46
         44    >   QM_ASSIGN                                        ~45     0
         45      > JMP                                                      ->48
         46    >   FETCH_DIM_R                                      ~46     !6, 0
         47        QM_ASSIGN                                        ~45     ~46
         48    >   ASSIGN_DIM                                               !6, 0
         49        OP_DATA                                                  ~45
   18    50        FETCH_DIM_R                                      ~48     !6, 1
         51        IS_EQUAL                                                 ~48, ''
         52      > JMPZ                                                     ~49, ->55
         53    >   QM_ASSIGN                                        ~50     0
         54      > JMP                                                      ->57
         55    >   FETCH_DIM_R                                      ~51     !6, 1
         56        QM_ASSIGN                                        ~50     ~51
         57    >   ASSIGN_DIM                                               !6, 1
         58        OP_DATA                                                  ~50
   19    59        FETCH_DIM_R                                      ~53     !6, 2
         60        IS_EQUAL                                                 ~53, ''
         61      > JMPZ                                                     ~54, ->64
         62    >   QM_ASSIGN                                        ~55     0
         63      > JMP                                                      ->66
         64    >   FETCH_DIM_R                                      ~56     !6, 2
         65        QM_ASSIGN                                        ~55     ~56
         66    >   ASSIGN_DIM                                               !6, 2
         67        OP_DATA                                                  ~55
   21    68        INIT_FCALL                                               'mktime'
         69        FETCH_DIM_R                                      ~57     !6, 0
         70        SEND_VAL                                                 ~57
         71        FETCH_DIM_R                                      ~58     !6, 1
         72        SEND_VAL                                                 ~58
         73        FETCH_DIM_R                                      ~59     !6, 2
         74        SEND_VAL                                                 ~59
         75        FETCH_DIM_R                                      ~60     !5, 1
         76        SEND_VAL                                                 ~60
         77        FETCH_DIM_R                                      ~61     !5, 2
         78        SEND_VAL                                                 ~61
         79        FETCH_DIM_R                                      ~62     !5, 0
         80        SEND_VAL                                                 ~62
         81        DO_ICALL                                         $63     
         82        ASSIGN                                                   !9, $63
   23    83        FETCH_DIM_R                                      ~66     !8, 0
         84        IS_EQUAL                                                 ~66, ''
         85      > JMPZ                                                     ~67, ->88
         86    >   QM_ASSIGN                                        ~68     0
         87      > JMP                                                      ->90
         88    >   FETCH_DIM_R                                      ~69     !8, 0
         89        QM_ASSIGN                                        ~68     ~69
         90    >   ASSIGN_DIM                                               !8, 0
         91        OP_DATA                                                  ~68
   24    92        FETCH_DIM_R                                      ~71     !8, 1
         93        IS_EQUAL                                                 ~71, ''
         94      > JMPZ                                                     ~72, ->97
         95    >   QM_ASSIGN                                        ~73     0
         96      > JMP                                                      ->99
         97    >   FETCH_DIM_R                                      ~74     !8, 1
         98        QM_ASSIGN                                        ~73     ~74
         99    >   ASSIGN_DIM                                               !8, 1
        100        OP_DATA                                                  ~73
   25   101        FETCH_DIM_R                                      ~76     !8, 2
        102        IS_EQUAL                                                 ~76, ''
        103      > JMPZ                                                     ~77, ->106
        104    >   QM_ASSIGN                                        ~78     0
        105      > JMP                                                      ->108
        106    >   FETCH_DIM_R                                      ~79     !8, 2
        107        QM_ASSIGN                                        ~78     ~79
        108    >   ASSIGN_DIM                                               !8, 2
        109        OP_DATA                                                  ~78
   27   110        INIT_FCALL                                               'mktime'
        111        FETCH_DIM_R                                      ~80     !8, 0
        112        SEND_VAL                                                 ~80
        113        FETCH_DIM_R                                      ~81     !8, 1
        114        SEND_VAL                                                 ~81
        115        FETCH_DIM_R                                      ~82     !8, 2
        116        SEND_VAL                                                 ~82
        117        FETCH_DIM_R                                      ~83     !7, 1
        118        SEND_VAL                                                 ~83
        119        FETCH_DIM_R                                      ~84     !7, 2
        120        SEND_VAL                                                 ~84
        121        FETCH_DIM_R                                      ~85     !7, 0
        122        SEND_VAL                                                 ~85
        123        DO_ICALL                                         $86     
        124        ASSIGN                                                   !10, $86
   28   125        IS_SMALLER                                               !10, !9
        126      > JMPZ                                                     ~88, ->128
   29   127    > > RETURN                                                   null
   32   128    >   SUB                                              ~89     !10, !9
        129        ASSIGN                                                   !11, ~89
   33   130        ASSIGN                                                   !12, 0
   34   131        ASSIGN                                                   !13, 0
   35   132        ASSIGN                                                   !14, 0
   36   133        ASSIGN                                                   !15, 0
   37   134        MOD                                              ~95     !11, 86400
        135        IS_SMALLER_OR_EQUAL                                      ~95, 0
        136      > JMPZ                                                     ~96, ->139
   38   137    >   DIV                                              ~97     !11, 86400
        138        ASSIGN                                                   !12, ~97
   40   139    >   MOD                                              ~99     !11, 86400
        140        IS_SMALLER                                               0, ~99
        141      > JMPZ                                                     ~100, ->170
   41   142    >   MOD                                              ~101    !11, 86400
        143        ASSIGN                                                   !16, ~101
   42   144        SUB                                              ~103    !11, !16
        145        DIV                                              ~104    ~103, 86400
        146        ASSIGN                                                   !12, ~104
   43   147        MOD                                              ~106    !16, 3600
        148        IS_SMALLER                                               0, ~106
        149      > JMPZ                                                     ~107, ->168
   44   150    >   MOD                                              ~108    !16, 3600
        151        ASSIGN                                                   !17, ~108
   45   152        SUB                                              ~110    !16, !17
        153        DIV                                              ~111    ~110, 3600
        154        ASSIGN                                                   !13, ~111
   46   155        MOD                                              ~113    !17, 60
        156        IS_SMALLER                                               0, ~113
        157      > JMPZ                                                     ~114, ->165
   47   158    >   MOD                                              ~115    !17, 60
        159        ASSIGN                                                   !18, ~115
   48   160        SUB                                              ~117    !17, !18
        161        DIV                                              ~118    ~117, 60
        162        ASSIGN                                                   !14, ~118
   49   163        ASSIGN                                                   !15, !18
        164      > JMP                                                      ->167
   51   165    >   DIV                                              ~121    !17, 60
        166        ASSIGN                                                   !14, ~121
        167    > > JMP                                                      ->170
   54   168    >   DIV                                              ~123    !16, 3600
        169        ASSIGN                                                   !13, ~123
   58   170    > > SWITCH_STRING                                            !19, [ 'd':->192, 'D':->192, 'h':->202, 'H':->202, 'm':->212, 'M':->212, 's':->222, 'S':->222, 'a':->230, 'A':->230, ], ->236
   59   171    >   IS_EQUAL                                                 !19, 'd'
        172      > JMPNZ                                                    ~125, ->192
   60   173    >   IS_EQUAL                                                 !19, 'D'
        174      > JMPNZ                                                    ~125, ->192
   67   175    >   IS_EQUAL                                                 !19, 'h'
        176      > JMPNZ                                                    ~125, ->202
   68   177    >   IS_EQUAL                                                 !19, 'H'
        178      > JMPNZ                                                    ~125, ->202
   74   179    >   IS_EQUAL                                                 !19, 'm'
        180      > JMPNZ                                                    ~125, ->212
   75   181    >   IS_EQUAL                                                 !19, 'M'
        182      > JMPNZ                                                    ~125, ->212
   80   183    >   IS_EQUAL                                                 !19, 's'
        184      > JMPNZ                                                    ~125, ->222
   81   185    >   IS_EQUAL                                                 !19, 'S'
        186      > JMPNZ                                                    ~125, ->222
   84   187    >   IS_EQUAL                                                 !19, 'a'
        188      > JMPNZ                                                    ~125, ->230
   85   189    >   IS_EQUAL                                                 !19, 'A'
        190      > JMPNZ                                                    ~125, ->230
        191    > > JMP                                                      ->236
   61   192    >   ASSIGN                                                   !20, 0
   62   193        DIV                                              ~127    !15, 86400
        194        ASSIGN_OP                                     1          !20, ~127
   63   195        DIV                                              ~129    !14, 1440
        196        ASSIGN_OP                                     1          !20, ~129
   64   197        DIV                                              ~131    !13, 24
        198        ASSIGN_OP                                     1          !20, ~131
   65   199        ADD                                              ~133    !12, !20
        200        ASSIGN                                                   !2, ~133
   66   201      > JMP                                                      ->236
   69   202    >   ASSIGN                                                   !21, 0
   70   203        DIV                                              ~136    !15, 3600
        204        ASSIGN_OP                                     1          !21, ~136
   71   205        DIV                                              ~138    !14, 60
        206        ASSIGN_OP                                     1          !21, ~138
   72   207        MUL                                              ~140    !12, 24
        208        ADD                                              ~141    !13, ~140
        209        ADD                                              ~142    ~141, !21
        210        ASSIGN                                                   !2, ~142
   73   211      > JMP                                                      ->236
   76   212    >   ASSIGN                                                   !22, 0
   77   213        DIV                                              ~145    !15, 60
        214        ASSIGN_OP                                     1          !22, ~145
   78   215        MUL                                              ~147    !12, 1440
        216        ADD                                              ~148    !14, ~147
        217        MUL                                              ~149    !13, 60
        218        ADD                                              ~150    ~148, ~149
        219        ADD                                              ~151    ~150, !22
        220        ASSIGN                                                   !2, ~151
   79   221      > JMP                                                      ->236
   82   222    >   MUL                                              ~153    !12, 86400
        223        ADD                                              ~154    !15, ~153
        224        MUL                                              ~155    !13, 3600
        225        ADD                                              ~156    ~154, ~155
        226        MUL                                              ~157    !14, 60
        227        ADD                                              ~158    ~156, ~157
        228        ASSIGN                                                   !2, ~158
   83   229      > JMP                                                      ->236
   87   230    >   INIT_ARRAY                                       ~160    !12, 'days'
   88   231        ADD_ARRAY_ELEMENT                                ~160    !13, 'hours'
   89   232        ADD_ARRAY_ELEMENT                                ~160    !14, 'minutes'
   90   233        ADD_ARRAY_ELEMENT                                ~160    !15, 'seconds'
   86   234        ASSIGN                                                   !2, ~160
   92   235      > JMP                                                      ->236
   94   236    >   CONCAT                                           ~162    !2, '%3E%3E%3E%3E%3E%3E'
        237        ECHO                                                     ~162
   95   238      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
159.54 ms | 1420 KiB | 15 Q