3v4l.org

run code in 300+ PHP versions simultaneously
<?php $base = new DateTime("2000-03-04 00:00:00 Europe/Berlin"); $date = new DateTime("2016-09-07 01:00:00 Europe/Berlin"); $interval = new DateInterval('P5Y6M1D'); $ret = $date; $diff = $base->diff($date); // var_dump($diff); $iterations = 0; $y = $base->format('Y'); $m = $base->format('m'); $d = $base->format('d'); $h = $base->format('G'); $i = $base->format('i'); $s = $base->format('s'); if ($interval->y || $interval->m) { $monthDiff = $diff->y * 12 + $diff->m; $monthInterval = $interval->y * 12 + $interval->m; $iterations = ceil($monthDiff / $monthInterval); $y = $base->format('Y') + ($interval->y * $iterations); $m = $base->format('m') + ($interval->m * $iterations); echo "set y:{$y}, m:{$m}, iterations:{$iterations}\n"; } if ($interval->d) { var_dump($diff->d, ($interval->d * $iterations)); $modify = $diff->d - ($interval->d * $iterations); if ($modify > 0) { $y += $interval->y; $m += $interval->m; $iterations++; } $d += $interval->d * $iterations; echo "set y:{$y}, m:{$m}, d:{$d}, iterations:{$iterations}\n"; } //if ($interval->h) { var_dump($diff->h, ($interval->h * $iterations)); $modify = $diff->h - ($interval->h * $iterations); if ($modify > 0) { $y += $interval->y; $m += $interval->m; $d += $interval->d; $iterations++; } $h += $interval->h * $iterations; echo "set y:{$y}, m:{$m}, d:{$d}, h:{$h}, iterations:{$iterations}\n"; $ret->setDate($y, $m, $d); $ret->setTime($h, $i, $s); echo $ret->format("Y-m-d H:i:s") . "\n"; exit; if ($interval->y) { $y = $diff->y / $interval->y; if ($y) { $intervals = $y / $interval->y; $m = $interval->m * $intervals; $y -= floor($m / 12); $m -= floor($m / 12) * 12; $ret->setDate( $base->format('Y') + $y, $base->format('m') + $m, $base->format('d') ); /* $ret->setTime( $base->format('G') + ($interval->h * $intervals), $base->format('i') + ($interval->i * $intervals), $base->format('s') + ($interval->s * $intervals) ); */ } } var_dump($ret); exit; $intervalMonths = $interval->m ?: 12; $m = ceil($diff->m / $intervalMonths) * $intervalMonths; if ($interval->d) { $d = ceil($diff->d / $interval->d) * $interval->d; } else { $d = 0; } $intervalHours = $interval->h ?: 24; $intervalMinutes = $interval->i ?: 60; $intervalSeconds = $interval->s ?: 60; $h = ceil($diff->h / $intervalHours) * $intervalHours; $i = ($h) ? $interval->i : ceil($diff->i / $intervalMinutes) * $intervalMinutes; $s = ($h || $i) ? $interval->s : ceil($diff->s / $intervalSeconds) * $intervalSeconds; if ($interval->d) { $d = ceil($diff->d / $interval->d) * $interval->d; } if ($interval->m) { $m = ceil($diff->m / $interval->m) * $interval->m; } if ($interval->y) { $y = ceil($diff->y / $interval->y) * $interval->y; } $s += $base->format('s'); $i += $base->format('i'); $h += $base->format('G'); $d += $base->format('d'); $m += $base->format('m'); $y += $base->format('Y'); $ret->setTime($h, $i, $s); //$ret->setDate($y, $m, $d); return $ret;
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 47) Position 1 = 44, Position 2 = 46
Branch analysis from position: 44
2 jumps found. (Code = 43) Position 1 = 47, Position 2 = 84
Branch analysis from position: 47
2 jumps found. (Code = 43) Position 1 = 86, Position 2 = 118
Branch analysis from position: 86
2 jumps found. (Code = 43) Position 1 = 100, Position 2 = 105
Branch analysis from position: 100
2 jumps found. (Code = 43) Position 1 = 132, Position 2 = 139
Branch analysis from position: 132
1 jumps found. (Code = 79) Position 1 = -2
Branch analysis from position: 139
Branch analysis from position: 105
Branch analysis from position: 118
Branch analysis from position: 84
Branch analysis from position: 46
filename:       /in/aXrNN
function name:  (null)
number of ops:  347
compiled vars:  !0 = $base, !1 = $date, !2 = $interval, !3 = $ret, !4 = $diff, !5 = $iterations, !6 = $y, !7 = $m, !8 = $d, !9 = $h, !10 = $i, !11 = $s, !12 = $monthDiff, !13 = $monthInterval, !14 = $modify, !15 = $intervals, !16 = $intervalMonths, !17 = $intervalHours, !18 = $intervalMinutes, !19 = $intervalSeconds
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   NEW                                              $20     'DateTime'
          1        SEND_VAL_EX                                              '2000-03-04+00%3A00%3A00+Europe%2FBerlin'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $20
    4     4        NEW                                              $23     'DateTime'
          5        SEND_VAL_EX                                              '2016-09-07+01%3A00%3A00+Europe%2FBerlin'
          6        DO_FCALL                                      0          
          7        ASSIGN                                                   !1, $23
    5     8        NEW                                              $26     'DateInterval'
          9        SEND_VAL_EX                                              'P5Y6M1D'
         10        DO_FCALL                                      0          
         11        ASSIGN                                                   !2, $26
    7    12        ASSIGN                                                   !3, !1
    8    13        INIT_METHOD_CALL                                         !0, 'diff'
         14        SEND_VAR_EX                                              !1
         15        DO_FCALL                                      0  $30     
         16        ASSIGN                                                   !4, $30
   11    17        ASSIGN                                                   !5, 0
   13    18        INIT_METHOD_CALL                                         !0, 'format'
         19        SEND_VAL_EX                                              'Y'
         20        DO_FCALL                                      0  $33     
         21        ASSIGN                                                   !6, $33
   14    22        INIT_METHOD_CALL                                         !0, 'format'
         23        SEND_VAL_EX                                              'm'
         24        DO_FCALL                                      0  $35     
         25        ASSIGN                                                   !7, $35
   15    26        INIT_METHOD_CALL                                         !0, 'format'
         27        SEND_VAL_EX                                              'd'
         28        DO_FCALL                                      0  $37     
         29        ASSIGN                                                   !8, $37
   16    30        INIT_METHOD_CALL                                         !0, 'format'
         31        SEND_VAL_EX                                              'G'
         32        DO_FCALL                                      0  $39     
         33        ASSIGN                                                   !9, $39
   17    34        INIT_METHOD_CALL                                         !0, 'format'
         35        SEND_VAL_EX                                              'i'
         36        DO_FCALL                                      0  $41     
         37        ASSIGN                                                   !10, $41
   18    38        INIT_METHOD_CALL                                         !0, 'format'
         39        SEND_VAL_EX                                              's'
         40        DO_FCALL                                      0  $43     
         41        ASSIGN                                                   !11, $43
   20    42        FETCH_OBJ_R                                      ~45     !2, 'y'
         43      > JMPNZ_EX                                         ~45     ~45, ->46
         44    >   FETCH_OBJ_R                                      ~46     !2, 'm'
         45        BOOL                                             ~45     ~46
         46    > > JMPZ                                                     ~45, ->84
   21    47    >   FETCH_OBJ_R                                      ~47     !4, 'y'
         48        MUL                                              ~48     ~47, 12
         49        FETCH_OBJ_R                                      ~49     !4, 'm'
         50        ADD                                              ~50     ~48, ~49
         51        ASSIGN                                                   !12, ~50
   22    52        FETCH_OBJ_R                                      ~52     !2, 'y'
         53        MUL                                              ~53     ~52, 12
         54        FETCH_OBJ_R                                      ~54     !2, 'm'
         55        ADD                                              ~55     ~53, ~54
         56        ASSIGN                                                   !13, ~55
   23    57        INIT_FCALL                                               'ceil'
         58        DIV                                              ~57     !12, !13
         59        SEND_VAL                                                 ~57
         60        DO_ICALL                                         $58     
         61        ASSIGN                                                   !5, $58
   24    62        INIT_METHOD_CALL                                         !0, 'format'
         63        SEND_VAL_EX                                              'Y'
         64        DO_FCALL                                      0  $60     
         65        FETCH_OBJ_R                                      ~61     !2, 'y'
         66        MUL                                              ~62     !5, ~61
         67        ADD                                              ~63     $60, ~62
         68        ASSIGN                                                   !6, ~63
   25    69        INIT_METHOD_CALL                                         !0, 'format'
         70        SEND_VAL_EX                                              'm'
         71        DO_FCALL                                      0  $65     
         72        FETCH_OBJ_R                                      ~66     !2, 'm'
         73        MUL                                              ~67     !5, ~66
         74        ADD                                              ~68     $65, ~67
         75        ASSIGN                                                   !7, ~68
   26    76        ROPE_INIT                                     7  ~71     'set+y%3A'
         77        ROPE_ADD                                      1  ~71     ~71, !6
         78        ROPE_ADD                                      2  ~71     ~71, '%2C+m%3A'
         79        ROPE_ADD                                      3  ~71     ~71, !7
         80        ROPE_ADD                                      4  ~71     ~71, '%2C+iterations%3A'
         81        ROPE_ADD                                      5  ~71     ~71, !5
         82        ROPE_END                                      6  ~70     ~71, '%0A'
         83        ECHO                                                     ~70
   29    84    >   FETCH_OBJ_R                                      ~75     !2, 'd'
         85      > JMPZ                                                     ~75, ->118
   30    86    >   INIT_FCALL                                               'var_dump'
         87        FETCH_OBJ_R                                      ~76     !4, 'd'
         88        SEND_VAL                                                 ~76
         89        FETCH_OBJ_R                                      ~77     !2, 'd'
         90        MUL                                              ~78     !5, ~77
         91        SEND_VAL                                                 ~78
         92        DO_ICALL                                                 
   31    93        FETCH_OBJ_R                                      ~80     !4, 'd'
         94        FETCH_OBJ_R                                      ~81     !2, 'd'
         95        MUL                                              ~82     !5, ~81
         96        SUB                                              ~83     ~80, ~82
         97        ASSIGN                                                   !14, ~83
   32    98        IS_SMALLER                                               0, !14
         99      > JMPZ                                                     ~85, ->105
   33   100    >   FETCH_OBJ_R                                      ~86     !2, 'y'
        101        ASSIGN_OP                                     1          !6, ~86
   34   102        FETCH_OBJ_R                                      ~88     !2, 'm'
        103        ASSIGN_OP                                     1          !7, ~88
   35   104        PRE_INC                                                  !5
   37   105    >   FETCH_OBJ_R                                      ~91     !2, 'd'
        106        MUL                                              ~92     !5, ~91
        107        ASSIGN_OP                                     1          !8, ~92
   38   108        ROPE_INIT                                     9  ~95     'set+y%3A'
        109        ROPE_ADD                                      1  ~95     ~95, !6
        110        ROPE_ADD                                      2  ~95     ~95, '%2C+m%3A'
        111        ROPE_ADD                                      3  ~95     ~95, !7
        112        ROPE_ADD                                      4  ~95     ~95, '%2C+d%3A'
        113        ROPE_ADD                                      5  ~95     ~95, !8
        114        ROPE_ADD                                      6  ~95     ~95, '%2C+iterations%3A'
        115        ROPE_ADD                                      7  ~95     ~95, !5
        116        ROPE_END                                      8  ~94     ~95, '%0A'
        117        ECHO                                                     ~94
   42   118    >   INIT_FCALL                                               'var_dump'
        119        FETCH_OBJ_R                                      ~100    !4, 'h'
        120        SEND_VAL                                                 ~100
        121        FETCH_OBJ_R                                      ~101    !2, 'h'
        122        MUL                                              ~102    !5, ~101
        123        SEND_VAL                                                 ~102
        124        DO_ICALL                                                 
   43   125        FETCH_OBJ_R                                      ~104    !4, 'h'
        126        FETCH_OBJ_R                                      ~105    !2, 'h'
        127        MUL                                              ~106    !5, ~105
        128        SUB                                              ~107    ~104, ~106
        129        ASSIGN                                                   !14, ~107
   44   130        IS_SMALLER                                               0, !14
        131      > JMPZ                                                     ~109, ->139
   45   132    >   FETCH_OBJ_R                                      ~110    !2, 'y'
        133        ASSIGN_OP                                     1          !6, ~110
   46   134        FETCH_OBJ_R                                      ~112    !2, 'm'
        135        ASSIGN_OP                                     1          !7, ~112
   47   136        FETCH_OBJ_R                                      ~114    !2, 'd'
        137        ASSIGN_OP                                     1          !8, ~114
   48   138        PRE_INC                                                  !5
   50   139    >   FETCH_OBJ_R                                      ~117    !2, 'h'
        140        MUL                                              ~118    !5, ~117
        141        ASSIGN_OP                                     1          !9, ~118
   51   142        ROPE_INIT                                    11  ~121    'set+y%3A'
        143        ROPE_ADD                                      1  ~121    ~121, !6
        144        ROPE_ADD                                      2  ~121    ~121, '%2C+m%3A'
        145        ROPE_ADD                                      3  ~121    ~121, !7
        146        ROPE_ADD                                      4  ~121    ~121, '%2C+d%3A'
        147        ROPE_ADD                                      5  ~121    ~121, !8
        148        ROPE_ADD                                      6  ~121    ~121, '%2C+h%3A'
        149        ROPE_ADD                                      7  ~121    ~121, !9
        150        ROPE_ADD                                      8  ~121    ~121, '%2C+iterations%3A'
        151        ROPE_ADD                                      9  ~121    ~121, !5
        152        ROPE_END                                     10  ~120    ~121, '%0A'
        153        ECHO                                                     ~120
   54   154        INIT_METHOD_CALL                                         !3, 'setDate'
        155        SEND_VAR_EX                                              !6
        156        SEND_VAR_EX                                              !7
        157        SEND_VAR_EX                                              !8
        158        DO_FCALL                                      0          
   55   159        INIT_METHOD_CALL                                         !3, 'setTime'
        160        SEND_VAR_EX                                              !9
        161        SEND_VAR_EX                                              !10
        162        SEND_VAR_EX                                              !11
        163        DO_FCALL                                      0          
   57   164        INIT_METHOD_CALL                                         !3, 'format'
        165        SEND_VAL_EX                                              'Y-m-d+H%3Ai%3As'
        166        DO_FCALL                                      0  $129    
        167        CONCAT                                           ~130    $129, '%0A'
        168        ECHO                                                     ~130
   59   169      > EXIT                                                     
   61   170*       FETCH_OBJ_R                                      ~131    !2, 'y'
        171*       JMPZ                                                     ~131, ->210
   62   172*       FETCH_OBJ_R                                      ~132    !4, 'y'
        173*       FETCH_OBJ_R                                      ~133    !2, 'y'
        174*       DIV                                              ~134    ~132, ~133
        175*       ASSIGN                                                   !6, ~134
   64   176*       JMPZ                                                     !6, ->210
   65   177*       FETCH_OBJ_R                                      ~136    !2, 'y'
        178*       DIV                                              ~137    !6, ~136
        179*       ASSIGN                                                   !15, ~137
   67   180*       FETCH_OBJ_R                                      ~139    !2, 'm'
        181*       MUL                                              ~140    !15, ~139
        182*       ASSIGN                                                   !7, ~140
   68   183*       INIT_FCALL                                               'floor'
        184*       DIV                                              ~142    !7, 12
        185*       SEND_VAL                                                 ~142
        186*       DO_ICALL                                         $143    
        187*       ASSIGN_OP                                     2          !6, $143
   69   188*       INIT_FCALL                                               'floor'
        189*       DIV                                              ~145    !7, 12
        190*       SEND_VAL                                                 ~145
        191*       DO_ICALL                                         $146    
        192*       MUL                                              ~147    $146, 12
        193*       ASSIGN_OP                                     2          !7, ~147
   73   194*       INIT_METHOD_CALL                                         !3, 'setDate'
   74   195*       INIT_METHOD_CALL                                         !0, 'format'
        196*       SEND_VAL_EX                                              'Y'
        197*       DO_FCALL                                      0  $149    
        198*       ADD                                              ~150    $149, !6
        199*       SEND_VAL_EX                                              ~150
   75   200*       INIT_METHOD_CALL                                         !0, 'format'
        201*       SEND_VAL_EX                                              'm'
        202*       DO_FCALL                                      0  $151    
        203*       ADD                                              ~152    $151, !7
        204*       SEND_VAL_EX                                              ~152
   76   205*       INIT_METHOD_CALL                                         !0, 'format'
        206*       SEND_VAL_EX                                              'd'
        207*       DO_FCALL                                      0  $153    
        208*       SEND_VAR_NO_REF_EX                                       $153
        209*       DO_FCALL                                      0          
   88   210*       INIT_FCALL                                               'var_dump'
        211*       SEND_VAR                                                 !3
        212*       DO_ICALL                                                 
        213*       EXIT                                                     
   90   214*       FETCH_OBJ_R                                      ~156    !2, 'm'
        215*       JMP_SET                                          ~157    ~156, ->217
        216*       QM_ASSIGN                                        ~157    12
        217*       ASSIGN                                                   !16, ~157
   91   218*       INIT_FCALL                                               'ceil'
        219*       FETCH_OBJ_R                                      ~159    !4, 'm'
        220*       DIV                                              ~160    ~159, !16
        221*       SEND_VAL                                                 ~160
        222*       DO_ICALL                                         $161    
        223*       MUL                                              ~162    !16, $161
        224*       ASSIGN                                                   !7, ~162
   93   225*       FETCH_OBJ_R                                      ~164    !2, 'd'
        226*       JMPZ                                                     ~164, ->237
   94   227*       INIT_FCALL                                               'ceil'
        228*       FETCH_OBJ_R                                      ~165    !4, 'd'
        229*       FETCH_OBJ_R                                      ~166    !2, 'd'
        230*       DIV                                              ~167    ~165, ~166
        231*       SEND_VAL                                                 ~167
        232*       DO_ICALL                                         $168    
        233*       FETCH_OBJ_R                                      ~169    !2, 'd'
        234*       MUL                                              ~170    $168, ~169
        235*       ASSIGN                                                   !8, ~170
        236*       JMP                                                      ->238
   96   237*       ASSIGN                                                   !8, 0
   99   238*       FETCH_OBJ_R                                      ~173    !2, 'h'
        239*       JMP_SET                                          ~174    ~173, ->241
        240*       QM_ASSIGN                                        ~174    24
        241*       ASSIGN                                                   !17, ~174
  100   242*       FETCH_OBJ_R                                      ~176    !2, 'i'
        243*       JMP_SET                                          ~177    ~176, ->245
        244*       QM_ASSIGN                                        ~177    60
        245*       ASSIGN                                                   !18, ~177
  101   246*       FETCH_OBJ_R                                      ~179    !2, 's'
        247*       JMP_SET                                          ~180    ~179, ->249
        248*       QM_ASSIGN                                        ~180    60
        249*       ASSIGN                                                   !19, ~180
  102   250*       INIT_FCALL                                               'ceil'
        251*       FETCH_OBJ_R                                      ~182    !4, 'h'
        252*       DIV                                              ~183    ~182, !17
        253*       SEND_VAL                                                 ~183
        254*       DO_ICALL                                         $184    
        255*       MUL                                              ~185    !17, $184
        256*       ASSIGN                                                   !9, ~185
  103   257*       JMPZ                                                     !9, ->261
        258*       FETCH_OBJ_R                                      ~187    !2, 'i'
        259*       QM_ASSIGN                                        ~188    ~187
        260*       JMP                                                      ->268
        261*       INIT_FCALL                                               'ceil'
        262*       FETCH_OBJ_R                                      ~189    !4, 'i'
        263*       DIV                                              ~190    ~189, !18
        264*       SEND_VAL                                                 ~190
        265*       DO_ICALL                                         $191    
        266*       MUL                                              ~192    !18, $191
        267*       QM_ASSIGN                                        ~188    ~192
        268*       ASSIGN                                                   !10, ~188
  104   269*       JMPNZ_EX                                         ~194    !9, ->271
        270*       BOOL                                             ~194    !10
        271*       JMPZ                                                     ~194, ->275
        272*       FETCH_OBJ_R                                      ~195    !2, 's'
        273*       QM_ASSIGN                                        ~196    ~195
        274*       JMP                                                      ->282
        275*       INIT_FCALL                                               'ceil'
        276*       FETCH_OBJ_R                                      ~197    !4, 's'
        277*       DIV                                              ~198    ~197, !19
        278*       SEND_VAL                                                 ~198
        279*       DO_ICALL                                         $199    
        280*       MUL                                              ~200    !19, $199
        281*       QM_ASSIGN                                        ~196    ~200
        282*       ASSIGN                                                   !11, ~196
  106   283*       FETCH_OBJ_R                                      ~202    !2, 'd'
        284*       JMPZ                                                     ~202, ->294
  107   285*       INIT_FCALL                                               'ceil'
        286*       FETCH_OBJ_R                                      ~203    !4, 'd'
        287*       FETCH_OBJ_R                                      ~204    !2, 'd'
        288*       DIV                                              ~205    ~203, ~204
        289*       SEND_VAL                                                 ~205
        290*       DO_ICALL                                         $206    
        291*       FETCH_OBJ_R                                      ~207    !2, 'd'
        292*       MUL                                              ~208    $206, ~207
        293*       ASSIGN                                                   !8, ~208
  110   294*       FETCH_OBJ_R                                      ~210    !2, 'm'
        295*       JMPZ                                                     ~210, ->305
  111   296*       INIT_FCALL                                               'ceil'
        297*       FETCH_OBJ_R                                      ~211    !4, 'm'
        298*       FETCH_OBJ_R                                      ~212    !2, 'm'
        299*       DIV                                              ~213    ~211, ~212
        300*       SEND_VAL                                                 ~213
        301*       DO_ICALL                                         $214    
        302*       FETCH_OBJ_R                                      ~215    !2, 'm'
        303*       MUL                                              ~216    $214, ~215
        304*       ASSIGN                                                   !7, ~216
  114   305*       FETCH_OBJ_R                                      ~218    !2, 'y'
        306*       JMPZ                                                     ~218, ->316
  115   307*       INIT_FCALL                                               'ceil'
        308*       FETCH_OBJ_R                                      ~219    !4, 'y'
        309*       FETCH_OBJ_R                                      ~220    !2, 'y'
        310*       DIV                                              ~221    ~219, ~220
        311*       SEND_VAL                                                 ~221
        312*       DO_ICALL                                         $222    
        313*       FETCH_OBJ_R                                      ~223    !2, 'y'
        314*       MUL                                              ~224    $222, ~223
        315*       ASSIGN                                                   !6, ~224
  118   316*       INIT_METHOD_CALL                                         !0, 'format'
        317*       SEND_VAL_EX                                              's'
        318*       DO_FCALL                                      0  $226    
        319*       ASSIGN_OP                                     1          !11, $226
  119   320*       INIT_METHOD_CALL                                         !0, 'format'
        321*       SEND_VAL_EX                                              'i'
        322*       DO_FCALL                                      0  $228    
        323*       ASSIGN_OP                                     1          !10, $228
  120   324*       INIT_METHOD_CALL                                         !0, 'format'
        325*       SEND_VAL_EX                                              'G'
        326*       DO_FCALL                                      0  $230    
        327*       ASSIGN_OP                                     1          !9, $230
  121   328*       INIT_METHOD_CALL                                         !0, 'format'
        329*       SEND_VAL_EX                                              'd'
        330*       DO_FCALL                                      0  $232    
        331*       ASSIGN_OP                                     1          !8, $232
  122   332*       INIT_METHOD_CALL                                         !0, 'format'
        333*       SEND_VAL_EX                                              'm'
        334*       DO_FCALL                                      0  $234    
        335*       ASSIGN_OP                                     1          !7, $234
  123   336*       INIT_METHOD_CALL                                         !0, 'format'
        337*       SEND_VAL_EX                                              'Y'
        338*       DO_FCALL                                      0  $236    
        339*       ASSIGN_OP                                     1          !6, $236
  125   340*       INIT_METHOD_CALL                                         !3, 'setTime'
        341*       SEND_VAR_EX                                              !9
        342*       SEND_VAR_EX                                              !10
        343*       SEND_VAR_EX                                              !11
        344*       DO_FCALL                                      0          
  128   345*       RETURN                                                   !3
        346*     > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
163.24 ms | 1424 KiB | 19 Q