3v4l.org

run code in 300+ PHP versions simultaneously
<?php $timezoneUtc = new DateTimeZone('UTC'); $timezoneBerlin = new DateTimeZone('Europe/Berlin'); $timezoneAmsterdam = new DateTimeZone('Europe/Amsterdam'); $dateTimeA = new DateTimeImmutable('2025-03-30 00:00:00', $timezoneUtc); $dateTimeB = new DateTimeImmutable('2025-03-31 00:00:00', $timezoneUtc); $dateTimeC = new DateTimeImmutable('2025-03-29 00:00:00', $timezoneBerlin); $dateTimeD = new DateTimeImmutable('2025-03-31 00:00:00', $timezoneBerlin); $dateTimeE = new DateTimeImmutable('2025-03-29 00:00:00', $timezoneAmsterdam); $dateTimeF = new DateTimeImmutable('2025-03-31 00:00:00', $timezoneAmsterdam); function toIntervalSpecification(DateInterval $interval): string { $specification = 'P'; $specification .= $interval->y ? $interval->y . 'Y' : ''; $specification .= $interval->m ? $interval->m . 'M' : ''; $specification .= $interval->d ? $interval->d . 'D' : ''; if ($interval->h ?? $interval->i ?? $interval->s ?? 0) { $specification .= 'T'; $specification .= $interval->h ? $interval->h . 'H' : ''; $specification .= $interval->i ? $interval->i . 'M' : ''; $specification .= $interval->s ? $interval->s . 'S' : ''; } if ($specification[-1] === 'P') { $specification = 'PT0S'; } return $specification; } $diffTwoTimezoneSameDstRulesA = $dateTimeC->diff($dateTimeF, true); $diffTwoTimezoneSameDstRulesB = $dateTimeF->diff($dateTimeC, true); $diffTwoTimezoneSameDstRulesC = $dateTimeE->diff($dateTimeD, true); $diffTwoTimezoneSameDstRulesD = $dateTimeD->diff($dateTimeE, true); echo toIntervalSpecification($diffTwoTimezoneSameDstRulesA) . PHP_EOL; echo toIntervalSpecification($diffTwoTimezoneSameDstRulesB) . PHP_EOL; echo toIntervalSpecification($diffTwoTimezoneSameDstRulesC) . PHP_EOL; echo toIntervalSpecification($diffTwoTimezoneSameDstRulesD) . PHP_EOL;
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/as3v7Y
function name:  (null)
number of ops:  83
compiled vars:  !0 = $timezoneUtc, !1 = $timezoneBerlin, !2 = $timezoneAmsterdam, !3 = $dateTimeA, !4 = $dateTimeB, !5 = $dateTimeC, !6 = $dateTimeD, !7 = $dateTimeE, !8 = $dateTimeF, !9 = $diffTwoTimezoneSameDstRulesA, !10 = $diffTwoTimezoneSameDstRulesB, !11 = $diffTwoTimezoneSameDstRulesC, !12 = $diffTwoTimezoneSameDstRulesD
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    2     0  E >   NEW                                              $13     'DateTimeZone'
          1        SEND_VAL_EX                                              'UTC'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !0, $13
    3     4        NEW                                              $16     'DateTimeZone'
          5        SEND_VAL_EX                                              'Europe%2FBerlin'
          6        DO_FCALL                                      0          
          7        ASSIGN                                                   !1, $16
    4     8        NEW                                              $19     'DateTimeZone'
          9        SEND_VAL_EX                                              'Europe%2FAmsterdam'
         10        DO_FCALL                                      0          
         11        ASSIGN                                                   !2, $19
    5    12        NEW                                              $22     'DateTimeImmutable'
         13        SEND_VAL_EX                                              '2025-03-30+00%3A00%3A00'
         14        SEND_VAR_EX                                              !0
         15        DO_FCALL                                      0          
         16        ASSIGN                                                   !3, $22
    6    17        NEW                                              $25     'DateTimeImmutable'
         18        SEND_VAL_EX                                              '2025-03-31+00%3A00%3A00'
         19        SEND_VAR_EX                                              !0
         20        DO_FCALL                                      0          
         21        ASSIGN                                                   !4, $25
    7    22        NEW                                              $28     'DateTimeImmutable'
         23        SEND_VAL_EX                                              '2025-03-29+00%3A00%3A00'
         24        SEND_VAR_EX                                              !1
         25        DO_FCALL                                      0          
         26        ASSIGN                                                   !5, $28
    8    27        NEW                                              $31     'DateTimeImmutable'
         28        SEND_VAL_EX                                              '2025-03-31+00%3A00%3A00'
         29        SEND_VAR_EX                                              !1
         30        DO_FCALL                                      0          
         31        ASSIGN                                                   !6, $31
    9    32        NEW                                              $34     'DateTimeImmutable'
         33        SEND_VAL_EX                                              '2025-03-29+00%3A00%3A00'
         34        SEND_VAR_EX                                              !2
         35        DO_FCALL                                      0          
         36        ASSIGN                                                   !7, $34
   10    37        NEW                                              $37     'DateTimeImmutable'
         38        SEND_VAL_EX                                              '2025-03-31+00%3A00%3A00'
         39        SEND_VAR_EX                                              !2
         40        DO_FCALL                                      0          
         41        ASSIGN                                                   !8, $37
   33    42        INIT_METHOD_CALL                                         !5, 'diff'
         43        SEND_VAR_EX                                              !8
         44        SEND_VAL_EX                                              <true>
         45        DO_FCALL                                      0  $40     
         46        ASSIGN                                                   !9, $40
   34    47        INIT_METHOD_CALL                                         !8, 'diff'
         48        SEND_VAR_EX                                              !5
         49        SEND_VAL_EX                                              <true>
         50        DO_FCALL                                      0  $42     
         51        ASSIGN                                                   !10, $42
   35    52        INIT_METHOD_CALL                                         !7, 'diff'
         53        SEND_VAR_EX                                              !6
         54        SEND_VAL_EX                                              <true>
         55        DO_FCALL                                      0  $44     
         56        ASSIGN                                                   !11, $44
   36    57        INIT_METHOD_CALL                                         !6, 'diff'
         58        SEND_VAR_EX                                              !7
         59        SEND_VAL_EX                                              <true>
         60        DO_FCALL                                      0  $46     
         61        ASSIGN                                                   !12, $46
   38    62        INIT_FCALL                                               'tointervalspecification'
         63        SEND_VAR                                                 !9
         64        DO_FCALL                                      0  $48     
         65        CONCAT                                           ~49     $48, '%0A'
         66        ECHO                                                     ~49
   39    67        INIT_FCALL                                               'tointervalspecification'
         68        SEND_VAR                                                 !10
         69        DO_FCALL                                      0  $50     
         70        CONCAT                                           ~51     $50, '%0A'
         71        ECHO                                                     ~51
   40    72        INIT_FCALL                                               'tointervalspecification'
         73        SEND_VAR                                                 !11
         74        DO_FCALL                                      0  $52     
         75        CONCAT                                           ~53     $52, '%0A'
         76        ECHO                                                     ~53
   41    77        INIT_FCALL                                               'tointervalspecification'
         78        SEND_VAR                                                 !12
         79        DO_FCALL                                      0  $54     
         80        CONCAT                                           ~55     $54, '%0A'
         81        ECHO                                                     ~55
   42    82      > RETURN                                                   1

Function tointervalspecification:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 8
Branch analysis from position: 4
1 jumps found. (Code = 42) Position 1 = 9
Branch analysis from position: 9
2 jumps found. (Code = 43) Position 1 = 12, Position 2 = 16
Branch analysis from position: 12
1 jumps found. (Code = 42) Position 1 = 17
Branch analysis from position: 17
2 jumps found. (Code = 43) Position 1 = 20, Position 2 = 24
Branch analysis from position: 20
1 jumps found. (Code = 42) Position 1 = 25
Branch analysis from position: 25
2 jumps found. (Code = 43) Position 1 = 36, Position 2 = 61
Branch analysis from position: 36
2 jumps found. (Code = 43) Position 1 = 39, Position 2 = 43
Branch analysis from position: 39
1 jumps found. (Code = 42) Position 1 = 44
Branch analysis from position: 44
2 jumps found. (Code = 43) Position 1 = 47, Position 2 = 51
Branch analysis from position: 47
1 jumps found. (Code = 42) Position 1 = 52
Branch analysis from position: 52
2 jumps found. (Code = 43) Position 1 = 55, Position 2 = 59
Branch analysis from position: 55
1 jumps found. (Code = 42) Position 1 = 60
Branch analysis from position: 60
2 jumps found. (Code = 43) Position 1 = 64, Position 2 = 65
Branch analysis from position: 64
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 65
Branch analysis from position: 59
2 jumps found. (Code = 43) Position 1 = 64, Position 2 = 65
Branch analysis from position: 64
Branch analysis from position: 65
Branch analysis from position: 51
2 jumps found. (Code = 43) Position 1 = 55, Position 2 = 59
Branch analysis from position: 55
Branch analysis from position: 59
Branch analysis from position: 43
2 jumps found. (Code = 43) Position 1 = 47, Position 2 = 51
Branch analysis from position: 47
Branch analysis from position: 51
Branch analysis from position: 61
Branch analysis from position: 24
2 jumps found. (Code = 43) Position 1 = 36, Position 2 = 61
Branch analysis from position: 36
Branch analysis from position: 61
Branch analysis from position: 16
2 jumps found. (Code = 43) Position 1 = 20, Position 2 = 24
Branch analysis from position: 20
Branch analysis from position: 24
Branch analysis from position: 8
2 jumps found. (Code = 43) Position 1 = 12, Position 2 = 16
Branch analysis from position: 12
Branch analysis from position: 16
filename:       /in/as3v7Y
function name:  toIntervalSpecification
number of ops:  69
compiled vars:  !0 = $interval, !1 = $specification
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   12     0  E >   RECV                                             !0      
   14     1        ASSIGN                                                   !1, 'P'
   15     2        FETCH_OBJ_R                                      ~3      !0, 'y'
          3      > JMPZ                                                     ~3, ->8
          4    >   FETCH_OBJ_R                                      ~4      !0, 'y'
          5        CONCAT                                           ~5      ~4, 'Y'
          6        QM_ASSIGN                                        ~6      ~5
          7      > JMP                                                      ->9
          8    >   QM_ASSIGN                                        ~6      ''
          9    >   ASSIGN_OP                                     8          !1, ~6
   16    10        FETCH_OBJ_R                                      ~8      !0, 'm'
         11      > JMPZ                                                     ~8, ->16
         12    >   FETCH_OBJ_R                                      ~9      !0, 'm'
         13        CONCAT                                           ~10     ~9, 'M'
         14        QM_ASSIGN                                        ~11     ~10
         15      > JMP                                                      ->17
         16    >   QM_ASSIGN                                        ~11     ''
         17    >   ASSIGN_OP                                     8          !1, ~11
   17    18        FETCH_OBJ_R                                      ~13     !0, 'd'
         19      > JMPZ                                                     ~13, ->24
         20    >   FETCH_OBJ_R                                      ~14     !0, 'd'
         21        CONCAT                                           ~15     ~14, 'D'
         22        QM_ASSIGN                                        ~16     ~15
         23      > JMP                                                      ->25
         24    >   QM_ASSIGN                                        ~16     ''
         25    >   ASSIGN_OP                                     8          !1, ~16
   19    26        FETCH_OBJ_IS                                     ~18     !0, 'h'
         27        COALESCE                                         ~19     ~18
         28        FETCH_OBJ_IS                                     ~20     !0, 'i'
         29        COALESCE                                         ~21     ~20
         30        FETCH_OBJ_IS                                     ~22     !0, 's'
         31        COALESCE                                         ~23     ~22
         32        QM_ASSIGN                                        ~23     0
         33        QM_ASSIGN                                        ~21     ~23
         34        QM_ASSIGN                                        ~19     ~21
         35      > JMPZ                                                     ~19, ->61
   20    36    >   ASSIGN_OP                                     8          !1, 'T'
   21    37        FETCH_OBJ_R                                      ~25     !0, 'h'
         38      > JMPZ                                                     ~25, ->43
         39    >   FETCH_OBJ_R                                      ~26     !0, 'h'
         40        CONCAT                                           ~27     ~26, 'H'
         41        QM_ASSIGN                                        ~28     ~27
         42      > JMP                                                      ->44
         43    >   QM_ASSIGN                                        ~28     ''
         44    >   ASSIGN_OP                                     8          !1, ~28
   22    45        FETCH_OBJ_R                                      ~30     !0, 'i'
         46      > JMPZ                                                     ~30, ->51
         47    >   FETCH_OBJ_R                                      ~31     !0, 'i'
         48        CONCAT                                           ~32     ~31, 'M'
         49        QM_ASSIGN                                        ~33     ~32
         50      > JMP                                                      ->52
         51    >   QM_ASSIGN                                        ~33     ''
         52    >   ASSIGN_OP                                     8          !1, ~33
   23    53        FETCH_OBJ_R                                      ~35     !0, 's'
         54      > JMPZ                                                     ~35, ->59
         55    >   FETCH_OBJ_R                                      ~36     !0, 's'
         56        CONCAT                                           ~37     ~36, 'S'
         57        QM_ASSIGN                                        ~38     ~37
         58      > JMP                                                      ->60
         59    >   QM_ASSIGN                                        ~38     ''
         60    >   ASSIGN_OP                                     8          !1, ~38
   26    61    >   FETCH_DIM_R                                      ~40     !1, -1
         62        IS_IDENTICAL                                             ~40, 'P'
         63      > JMPZ                                                     ~41, ->65
   27    64    >   ASSIGN                                                   !1, 'PT0S'
   30    65    >   VERIFY_RETURN_TYPE                                       !1
         66      > RETURN                                                   !1
   31    67*       VERIFY_RETURN_TYPE                                       
         68*     > RETURN                                                   null

End of function tointervalspecification

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
138 ms | 1011 KiB | 17 Q