3v4l.org

run code in 500+ PHP versions simultaneously
<?php date_default_timezone_set('Europe/London'); $date3 = DateTime::createFromFormat('Y-m-d H:i:s', '2019-04-01 00:00:00'); // 2019-04-01 00:00:00.0 Europe/London (+01:00) $date4 = clone $date3; $date4->modify('+5 week'); // 2019-05-06 00:00:00.0 Europe/London (+01:00) echo "So the originally modified date with 5 weeks added is:"; print_r($date4); echo "\n\n"; // positive DIFF and addition echo "1. positive DIFF and addition\n"; echo "diff is: "; $positiveDifferenceDateInterval2 = $date3->diff($date4); // interval: + 1m 4d; days 35 print_r($positiveDifferenceDateInterval2->format('%R %mm %dd')); echo "; days: {$positiveDifferenceDateInterval2->days} \n"; $positiveAddedDate = clone $date3; $positiveAddedDate->add($positiveDifferenceDateInterval2); print_r($positiveAddedDate); echo "is it equal to \$date4? "; var_dump($date4->getTimestamp() === $positiveAddedDate->getTimestamp()); echo "\n"; // negative DIFF and addition echo "2. negative DIFF and addition\n"; echo "diff is: "; $negativeDifferenceDateInterval2 = $date4->diff($date3); // interval: - 1m 5d; days 35 print_r($negativeDifferenceDateInterval2->format('%R %mm %dd')); echo "; days {$negativeDifferenceDateInterval2->days}"; $negativeAddedDate = clone $date3; // so in order to make it equal to $date4 I need to subtract a negative interval instead of adding a positive one? how crazy is that?! $negativeAddedDate->sub($negativeDifferenceDateInterval2); print_r($negativeAddedDate); echo "is it equal to \$date4? "; var_dump($date4->getTimestamp() === $negativeAddedDate->getTimestamp()); echo "\n\n"; echo 'So in order to make it equal to $date4 I need to subtract a negative interval instead of adding a positive one? How crazy is that?!';
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/2MNE3
function name:  (null)
number of ops:  89
compiled vars:  !0 = $date3, !1 = $date4, !2 = $positiveDifferenceDateInterval2, !3 = $positiveAddedDate, !4 = $negativeDifferenceDateInterval2, !5 = $negativeAddedDate
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   INIT_FCALL                                                   'date_default_timezone_set'
          1        SEND_VAL                                                     'Europe%2FLondon'
          2        DO_ICALL                                                     
    5     3        INIT_STATIC_METHOD_CALL                                      'DateTime', 'createFromFormat'
          4        SEND_VAL                                                     'Y-m-d+H%3Ai%3As'
          5        SEND_VAL                                                     '2019-04-01+00%3A00%3A00'
          6        DO_FCALL                                          0  $7      
          7        ASSIGN                                                       !0, $7
    6     8        CLONE                                                ~9      !0
          9        ASSIGN                                                       !1, ~9
    7    10        INIT_METHOD_CALL                                             !1, 'modify'
         11        SEND_VAL_EX                                                  '%2B5+week'
         12        DO_FCALL                                          0          
    8    13        ECHO                                                         'So+the+originally+modified+date+with+5+weeks+added+is%3A'
    9    14        INIT_FCALL                                                   'print_r'
         15        SEND_VAR                                                     !1
         16        DO_ICALL                                                     
   11    17        ECHO                                                         '%0A%0A'
   14    18        ECHO                                                         '1.+positive+DIFF+and+addition%0A'
   15    19        ECHO                                                         'diff+is%3A+'
   16    20        INIT_METHOD_CALL                                             !0, 'diff'
         21        SEND_VAR_EX                                                  !1
         22        DO_FCALL                                          0  $13     
         23        ASSIGN                                                       !2, $13
   17    24        INIT_FCALL                                                   'print_r'
         25        INIT_METHOD_CALL                                             !2, 'format'
         26        SEND_VAL_EX                                                  '%25R+%25mm+%25dd'
         27        DO_FCALL                                          0  $15     
         28        SEND_VAR                                                     $15
         29        DO_ICALL                                                     
   18    30        ROPE_INIT                                         3  ~19     '%3B+days%3A+'
         31        FETCH_OBJ_R                                          ~17     !2, 'days'
         32        ROPE_ADD                                          1  ~19     ~19, ~17
         33        ROPE_END                                          2  ~18     ~19, '+%0A'
         34        ECHO                                                         ~18
   19    35        CLONE                                                ~21     !0
         36        ASSIGN                                                       !3, ~21
   20    37        INIT_METHOD_CALL                                             !3, 'add'
         38        SEND_VAR_EX                                                  !2
         39        DO_FCALL                                          0          
   21    40        INIT_FCALL                                                   'print_r'
         41        SEND_VAR                                                     !3
         42        DO_ICALL                                                     
   22    43        ECHO                                                         'is+it+equal+to+%24date4%3F+'
   23    44        INIT_FCALL                                                   'var_dump'
         45        INIT_METHOD_CALL                                             !1, 'getTimestamp'
         46        DO_FCALL                                          0  $25     
         47        INIT_METHOD_CALL                                             !3, 'getTimestamp'
         48        DO_FCALL                                          0  $26     
         49        IS_IDENTICAL                                         ~27     $25, $26
         50        SEND_VAL                                                     ~27
         51        DO_ICALL                                                     
   24    52        ECHO                                                         '%0A'
   27    53        ECHO                                                         '2.+negative+DIFF+and+addition%0A'
   28    54        ECHO                                                         'diff+is%3A+'
   29    55        INIT_METHOD_CALL                                             !1, 'diff'
         56        SEND_VAR_EX                                                  !0
         57        DO_FCALL                                          0  $29     
         58        ASSIGN                                                       !4, $29
   30    59        INIT_FCALL                                                   'print_r'
         60        INIT_METHOD_CALL                                             !4, 'format'
         61        SEND_VAL_EX                                                  '%25R+%25mm+%25dd'
         62        DO_FCALL                                          0  $31     
         63        SEND_VAR                                                     $31
         64        DO_ICALL                                                     
   31    65        NOP                                                          
         66        FETCH_OBJ_R                                          ~33     !4, 'days'
         67        FAST_CONCAT                                          ~34     '%3B+days+', ~33
         68        ECHO                                                         ~34
   32    69        CLONE                                                ~35     !0
         70        ASSIGN                                                       !5, ~35
   34    71        INIT_METHOD_CALL                                             !5, 'sub'
         72        SEND_VAR_EX                                                  !4
         73        DO_FCALL                                          0          
   35    74        INIT_FCALL                                                   'print_r'
         75        SEND_VAR                                                     !5
         76        DO_ICALL                                                     
   36    77        ECHO                                                         'is+it+equal+to+%24date4%3F+'
   37    78        INIT_FCALL                                                   'var_dump'
         79        INIT_METHOD_CALL                                             !1, 'getTimestamp'
         80        DO_FCALL                                          0  $39     
         81        INIT_METHOD_CALL                                             !5, 'getTimestamp'
         82        DO_FCALL                                          0  $40     
         83        IS_IDENTICAL                                         ~41     $39, $40
         84        SEND_VAL                                                     ~41
         85        DO_ICALL                                                     
   38    86        ECHO                                                         '%0A%0A'
   40    87        ECHO                                                         'So+in+order+to+make+it+equal+to+%24date4+I+need+to+subtract+a+negative+interval+instead+of+adding+a+positive+one%3F+How+crazy+is+that%3F%21'
         88      > RETURN                                                       1

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
167.45 ms | 3649 KiB | 16 Q