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 23: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 = floor($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;
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/GuNGV
function name:  (null)
number of ops:  199
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
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   NEW                                              $16     'DateTime'
          1        SEND_VAL_EX                                              '2000-03-04+00%3A00%3A00+Europe%2FBerlin'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $16
    4     4        NEW                                              $19     'DateTime'
          5        SEND_VAL_EX                                              '2016-09-03+23%3A00%3A00+Europe%2FBerlin'
          6        DO_FCALL                                      0          
          7        ASSIGN                                                   !1, $19
    5     8        NEW                                              $22     'DateInterval'
          9        SEND_VAL_EX                                              'P5Y6M0D'
         10        DO_FCALL                                      0          
         11        ASSIGN                                                   !2, $22
    7    12        ASSIGN                                                   !3, !1
    8    13        INIT_METHOD_CALL                                         !0, 'diff'
         14        SEND_VAR_EX                                              !1
         15        DO_FCALL                                      0  $26     
         16        ASSIGN                                                   !4, $26
   11    17        ASSIGN                                                   !5, 0
   13    18        INIT_METHOD_CALL                                         !0, 'format'
         19        SEND_VAL_EX                                              'Y'
         20        DO_FCALL                                      0  $29     
         21        ASSIGN                                                   !6, $29
   14    22        INIT_METHOD_CALL                                         !0, 'format'
         23        SEND_VAL_EX                                              'm'
         24        DO_FCALL                                      0  $31     
         25        ASSIGN                                                   !7, $31
   15    26        INIT_METHOD_CALL                                         !0, 'format'
         27        SEND_VAL_EX                                              'd'
         28        DO_FCALL                                      0  $33     
         29        ASSIGN                                                   !8, $33
   16    30        INIT_METHOD_CALL                                         !0, 'format'
         31        SEND_VAL_EX                                              'G'
         32        DO_FCALL                                      0  $35     
         33        ASSIGN                                                   !9, $35
   17    34        INIT_METHOD_CALL                                         !0, 'format'
         35        SEND_VAL_EX                                              'i'
         36        DO_FCALL                                      0  $37     
         37        ASSIGN                                                   !10, $37
   18    38        INIT_METHOD_CALL                                         !0, 'format'
         39        SEND_VAL_EX                                              's'
         40        DO_FCALL                                      0  $39     
         41        ASSIGN                                                   !11, $39
   20    42        FETCH_OBJ_R                                      ~41     !2, 'y'
         43      > JMPNZ_EX                                         ~41     ~41, ->46
         44    >   FETCH_OBJ_R                                      ~42     !2, 'm'
         45        BOOL                                             ~41     ~42
         46    > > JMPZ                                                     ~41, ->84
   21    47    >   FETCH_OBJ_R                                      ~43     !4, 'y'
         48        MUL                                              ~44     ~43, 12
         49        FETCH_OBJ_R                                      ~45     !4, 'm'
         50        ADD                                              ~46     ~44, ~45
         51        ASSIGN                                                   !12, ~46
   22    52        FETCH_OBJ_R                                      ~48     !2, 'y'
         53        MUL                                              ~49     ~48, 12
         54        FETCH_OBJ_R                                      ~50     !2, 'm'
         55        ADD                                              ~51     ~49, ~50
         56        ASSIGN                                                   !13, ~51
   23    57        INIT_FCALL                                               'floor'
         58        DIV                                              ~53     !12, !13
         59        SEND_VAL                                                 ~53
         60        DO_ICALL                                         $54     
         61        ASSIGN                                                   !5, $54
   24    62        INIT_METHOD_CALL                                         !0, 'format'
         63        SEND_VAL_EX                                              'Y'
         64        DO_FCALL                                      0  $56     
         65        FETCH_OBJ_R                                      ~57     !2, 'y'
         66        MUL                                              ~58     !5, ~57
         67        ADD                                              ~59     $56, ~58
         68        ASSIGN                                                   !6, ~59
   25    69        INIT_METHOD_CALL                                         !0, 'format'
         70        SEND_VAL_EX                                              'm'
         71        DO_FCALL                                      0  $61     
         72        FETCH_OBJ_R                                      ~62     !2, 'm'
         73        MUL                                              ~63     !5, ~62
         74        ADD                                              ~64     $61, ~63
         75        ASSIGN                                                   !7, ~64
   26    76        ROPE_INIT                                     7  ~67     'set+y%3A'
         77        ROPE_ADD                                      1  ~67     ~67, !6
         78        ROPE_ADD                                      2  ~67     ~67, '%2C+m%3A'
         79        ROPE_ADD                                      3  ~67     ~67, !7
         80        ROPE_ADD                                      4  ~67     ~67, '%2C+iterations%3A'
         81        ROPE_ADD                                      5  ~67     ~67, !5
         82        ROPE_END                                      6  ~66     ~67, '%0A'
         83        ECHO                                                     ~66
   29    84    >   FETCH_OBJ_R                                      ~71     !4, 'd'
         85        FETCH_OBJ_R                                      ~72     !2, 'd'
         86        MUL                                              ~73     !5, ~72
         87        SUB                                              ~74     ~71, ~73
         88        ASSIGN                                                   !14, ~74
   30    89        IS_SMALLER                                               0, !14
         90      > JMPZ                                                     ~76, ->96
   31    91    >   FETCH_OBJ_R                                      ~77     !2, 'y'
         92        ASSIGN_OP                                     1          !6, ~77
   32    93        FETCH_OBJ_R                                      ~79     !2, 'm'
         94        ASSIGN_OP                                     1          !7, ~79
   33    95        PRE_INC                                                  !5
   35    96    >   FETCH_OBJ_R                                      ~82     !2, 'd'
         97        MUL                                              ~83     !5, ~82
         98        ASSIGN_OP                                     1          !8, ~83
   36    99        ROPE_INIT                                     9  ~86     'set+y%3A'
        100        ROPE_ADD                                      1  ~86     ~86, !6
        101        ROPE_ADD                                      2  ~86     ~86, '%2C+m%3A'
        102        ROPE_ADD                                      3  ~86     ~86, !7
        103        ROPE_ADD                                      4  ~86     ~86, '%2C+d%3A'
        104        ROPE_ADD                                      5  ~86     ~86, !8
        105        ROPE_ADD                                      6  ~86     ~86, '%2C+iterations%3A'
        106        ROPE_ADD                                      7  ~86     ~86, !5
        107        ROPE_END                                      8  ~85     ~86, '%0A'
        108        ECHO                                                     ~85
   38   109        FETCH_OBJ_R                                      ~91     !4, 'h'
        110        FETCH_OBJ_R                                      ~92     !2, 'h'
        111        MUL                                              ~93     !5, ~92
        112        SUB                                              ~94     ~91, ~93
        113        ASSIGN                                                   !14, ~94
   39   114        IS_SMALLER                                               0, !14
        115      > JMPZ                                                     ~96, ->123
   40   116    >   FETCH_OBJ_R                                      ~97     !2, 'y'
        117        ASSIGN_OP                                     1          !6, ~97
   41   118        FETCH_OBJ_R                                      ~99     !2, 'm'
        119        ASSIGN_OP                                     1          !7, ~99
   42   120        FETCH_OBJ_R                                      ~101    !2, 'd'
        121        ASSIGN_OP                                     1          !8, ~101
   43   122        PRE_INC                                                  !5
   45   123    >   FETCH_OBJ_R                                      ~104    !2, 'h'
        124        MUL                                              ~105    !5, ~104
        125        ASSIGN_OP                                     1          !9, ~105
   46   126        ROPE_INIT                                    11  ~108    'set+y%3A'
        127        ROPE_ADD                                      1  ~108    ~108, !6
        128        ROPE_ADD                                      2  ~108    ~108, '%2C+m%3A'
        129        ROPE_ADD                                      3  ~108    ~108, !7
        130        ROPE_ADD                                      4  ~108    ~108, '%2C+d%3A'
        131        ROPE_ADD                                      5  ~108    ~108, !8
        132        ROPE_ADD                                      6  ~108    ~108, '%2C+h%3A'
        133        ROPE_ADD                                      7  ~108    ~108, !9
        134        ROPE_ADD                                      8  ~108    ~108, '%2C+iterations%3A'
        135        ROPE_ADD                                      9  ~108    ~108, !5
        136        ROPE_END                                     10  ~107    ~108, '%0A'
        137        ECHO                                                     ~107
   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  $116    
        151        CONCAT                                           ~117    $116, '%0A'
        152        ECHO                                                     ~117
   54   153      > EXIT                                                     
   56   154*       FETCH_OBJ_R                                      ~118    !2, 'y'
        155*       JMPZ                                                     ~118, ->194
   57   156*       FETCH_OBJ_R                                      ~119    !4, 'y'
        157*       FETCH_OBJ_R                                      ~120    !2, 'y'
        158*       DIV                                              ~121    ~119, ~120
        159*       ASSIGN                                                   !6, ~121
   59   160*       JMPZ                                                     !6, ->194
   60   161*       FETCH_OBJ_R                                      ~123    !2, 'y'
        162*       DIV                                              ~124    !6, ~123
        163*       ASSIGN                                                   !15, ~124
   62   164*       FETCH_OBJ_R                                      ~126    !2, 'm'
        165*       MUL                                              ~127    !15, ~126
        166*       ASSIGN                                                   !7, ~127
   63   167*       INIT_FCALL                                               'floor'
        168*       DIV                                              ~129    !7, 12
        169*       SEND_VAL                                                 ~129
        170*       DO_ICALL                                         $130    
        171*       ASSIGN_OP                                     2          !6, $130
   64   172*       INIT_FCALL                                               'floor'
        173*       DIV                                              ~132    !7, 12
        174*       SEND_VAL                                                 ~132
        175*       DO_ICALL                                         $133    
        176*       MUL                                              ~134    $133, 12
        177*       ASSIGN_OP                                     2          !7, ~134
   68   178*       INIT_METHOD_CALL                                         !3, 'setDate'
   69   179*       INIT_METHOD_CALL                                         !0, 'format'
        180*       SEND_VAL_EX                                              'Y'
        181*       DO_FCALL                                      0  $136    
        182*       ADD                                              ~137    $136, !6
        183*       SEND_VAL_EX                                              ~137
   70   184*       INIT_METHOD_CALL                                         !0, 'format'
        185*       SEND_VAL_EX                                              'm'
        186*       DO_FCALL                                      0  $138    
        187*       ADD                                              ~139    $138, !7
        188*       SEND_VAL_EX                                              ~139
   71   189*       INIT_METHOD_CALL                                         !0, 'format'
        190*       SEND_VAL_EX                                              'd'
        191*       DO_FCALL                                      0  $140    
        192*       SEND_VAR_NO_REF_EX                                       $140
        193*       DO_FCALL                                      0          
   83   194*       INIT_FCALL                                               'var_dump'
        195*       SEND_VAR                                                 !3
        196*       DO_ICALL                                                 
        197*       EXIT                                                     
        198*     > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
172.51 ms | 1416 KiB | 18 Q