3v4l.org

run code in 300+ 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.0.0


preferences:
178.73 ms | 1404 KiB | 19 Q