3v4l.org

run code in 300+ PHP versions simultaneously
<?php function getDateDifference($dateFrom, $dateTo, $unit = 'd') { $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; } return $difference; } echo getDateDifference("2014-03-31","2010-05-16");
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/oL5SL
function name:  (null)
number of ops:  6
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   94     0  E >   INIT_FCALL                                               'getdatedifference'
          1        SEND_VAL                                                 '2014-03-31'
          2        SEND_VAL                                                 '2010-05-16'
          3        DO_FCALL                                      0  $0      
          4        ECHO                                                     $0
          5      > RETURN                                                   1

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

End of function getdatedifference

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
152.21 ms | 1414 KiB | 16 Q