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

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
157.26 ms | 1420 KiB | 19 Q