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

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
149.04 ms | 1429 KiB | 19 Q