3v4l.org

run code in 300+ PHP versions simultaneously
<?php $datetime1 = new DateTime('2017-04-26 18:13:06'); $datetime2 = new DateTime('2011-01-17 17:13:00'); // change the millenium to see output difference $diff = $datetime1->diff($datetime2); // this will get you very close, but it will not pad the digits to conform with your expected format echo "Raw Difference: " . $diff->format('%y years %m months %d days %h hours %i minutes %s seconds') . "\n"; // Notice the impact when you change $datetime2's millenium from '1' to '2' echo "Invalid format: " . $diff->format('%Y-%m-%d %H:%i:%s') . "\n"; // only H does it right $details = array_intersect_key((array)$diff,array_flip(['y','m','d','h','i','s'])); echo '$diff = ' . var_export($details, true) . "\n"; printf("Valid format: %04d-%02d-%02d %02d:%02d:%02d", $diff->y, $diff->m, $diff->d, $diff->h, $diff->i, $diff->s); // now all components of datetime are properly padded
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/VFBeK
function name:  (null)
number of ops:  56
compiled vars:  !0 = $datetime1, !1 = $datetime2, !2 = $diff, !3 = $details
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   NEW                                              $4      'DateTime'
          1        SEND_VAL_EX                                              '2017-04-26+18%3A13%3A06'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $4
    4     4        NEW                                              $7      'DateTime'
          5        SEND_VAL_EX                                              '2011-01-17+17%3A13%3A00'
          6        DO_FCALL                                      0          
          7        ASSIGN                                                   !1, $7
    5     8        INIT_METHOD_CALL                                         !0, 'diff'
          9        SEND_VAR_EX                                              !1
         10        DO_FCALL                                      0  $10     
         11        ASSIGN                                                   !2, $10
    8    12        INIT_METHOD_CALL                                         !2, 'format'
         13        SEND_VAL_EX                                              '%25y+years+%25m+months+%25d+days+%25h+hours+%25i+minutes+%25s+seconds'
         14        DO_FCALL                                      0  $12     
         15        CONCAT                                           ~13     'Raw+Difference%3A+', $12
         16        CONCAT                                           ~14     ~13, '%0A'
         17        ECHO                                                     ~14
   11    18        INIT_METHOD_CALL                                         !2, 'format'
         19        SEND_VAL_EX                                              '%25Y-%25m-%25d+%25H%3A%25i%3A%25s'
         20        DO_FCALL                                      0  $15     
         21        CONCAT                                           ~16     'Invalid+format%3A+', $15
         22        CONCAT                                           ~17     ~16, '%0A'
         23        ECHO                                                     ~17
   13    24        INIT_FCALL                                               'array_intersect_key'
         25        CAST                                          7  ~18     !2
         26        SEND_VAL                                                 ~18
         27        INIT_FCALL                                               'array_flip'
         28        SEND_VAL                                                 <array>
         29        DO_ICALL                                         $19     
         30        SEND_VAR                                                 $19
         31        DO_ICALL                                         $20     
         32        ASSIGN                                                   !3, $20
   14    33        INIT_FCALL                                               'var_export'
         34        SEND_VAR                                                 !3
         35        SEND_VAL                                                 <true>
         36        DO_ICALL                                         $22     
         37        CONCAT                                           ~23     '%24diff+%3D+', $22
         38        CONCAT                                           ~24     ~23, '%0A'
         39        ECHO                                                     ~24
   16    40        INIT_FCALL                                               'printf'
         41        SEND_VAL                                                 'Valid+format%3A+%2504d-%2502d-%2502d+%2502d%3A%2502d%3A%2502d'
         42        FETCH_OBJ_R                                      ~25     !2, 'y'
         43        SEND_VAL                                                 ~25
         44        FETCH_OBJ_R                                      ~26     !2, 'm'
         45        SEND_VAL                                                 ~26
         46        FETCH_OBJ_R                                      ~27     !2, 'd'
         47        SEND_VAL                                                 ~27
         48        FETCH_OBJ_R                                      ~28     !2, 'h'
         49        SEND_VAL                                                 ~28
         50        FETCH_OBJ_R                                      ~29     !2, 'i'
         51        SEND_VAL                                                 ~29
         52        FETCH_OBJ_R                                      ~30     !2, 's'
         53        SEND_VAL                                                 ~30
         54        DO_ICALL                                                 
         55      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
141.26 ms | 1006 KiB | 17 Q