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

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
165.84 ms | 1424 KiB | 19 Q