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

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
167.15 ms | 1420 KiB | 19 Q