3v4l.org

run code in 500+ PHP versions simultaneously
<?php function timeBetween(string $dob): array { $DAYS_IN_YEAR = 365; $DAYS_IN_WEEK = 7; $now = new DateTime(); // now $birthDate = new DateTime($dob); $totalDays = $now->diff($birthDate)->days; return array( 'Year(s)' => (int)floor($totalDays/$DAYS_IN_YEAR), 'Week(s)' => (int)floor(($totalDays % $DAYS_IN_YEAR) / $DAYS_IN_WEEK), 'Day(s)' => (int)($totalDays % $DAYS_IN_YEAR) % $DAYS_IN_WEEK ); } function timeBetweenToString(array $timeBetween, $join_phrase = ', and '): string { $timeBetween = array_filter($timeBetween); $result = array_reduce(array_keys($timeBetween), function ($results, $key) use ($timeBetween) { $value = $timeBetween[$key]; $results[] = "$value $key"; return $results; }, []); return implode($join_phrase, $result); } $people = []; $people[] = array('name' => 'Bob', 'bday' => '2000-02-17'); $people[] = array('name' => 'Jane', 'bday' => '2005-03-30'); $people[] = array('name' => 'Mark', 'bday' => '2011-12-05'); foreach($people as $value) { echo "{$value['name']} was born " . timeBetweenToString(timeBetween($value['bday'])) . " ago\n"; } echo PHP_EOL; foreach($people as $value) { $birthDate = new DateTime($value['bday']); echo "It's been " . timeBetweenToString(timeBetween($value['bday']), ' + ' ) . "since {$value['name']} was born on " . $birthDate->format('D, F jS ') . "\n"; }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 8, Position 2 = 23
Branch analysis from position: 8
2 jumps found. (Code = 78) Position 1 = 9, Position 2 = 23
Branch analysis from position: 9
1 jumps found. (Code = 42) Position 1 = 8
Branch analysis from position: 8
Branch analysis from position: 23
2 jumps found. (Code = 77) Position 1 = 26, Position 2 = 54
Branch analysis from position: 26
2 jumps found. (Code = 78) Position 1 = 27, Position 2 = 54
Branch analysis from position: 27
1 jumps found. (Code = 42) Position 1 = 26
Branch analysis from position: 26
Branch analysis from position: 54
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 54
Branch analysis from position: 23
filename:       /in/n8N8v
function name:  (null)
number of ops:  56
compiled vars:  !0 = $people, !1 = $value, !2 = $birthDate
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   31     0  E >   ASSIGN                                                       !0, <array>
   32     1        ASSIGN_DIM                                                   !0
          2        OP_DATA                                                      <array>
   33     3        ASSIGN_DIM                                                   !0
          4        OP_DATA                                                      <array>
   34     5        ASSIGN_DIM                                                   !0
          6        OP_DATA                                                      <array>
   36     7      > FE_RESET_R                                           $7      !0, ->23
          8    > > FE_FETCH_R                                                   $7, !1, ->23
   37     9    >   FETCH_DIM_R                                          ~8      !1, 'name'
         10        NOP                                                          
         11        FAST_CONCAT                                          ~9      ~8, '+was+born+'
         12        INIT_FCALL                                                   'timebetweentostring'
         13        INIT_FCALL                                                   'timebetween'
         14        FETCH_DIM_R                                          ~10     !1, 'bday'
         15        SEND_VAL                                                     ~10
         16        DO_FCALL                                          0  $11     
         17        SEND_VAR                                                     $11
         18        DO_FCALL                                          0  $12     
         19        CONCAT                                               ~13     ~9, $12
         20        CONCAT                                               ~14     ~13, '+ago%0A'
         21        ECHO                                                         ~14
   36    22      > JMP                                                          ->8
         23    >   FE_FREE                                                      $7
   40    24        ECHO                                                         '%0A'
   42    25      > FE_RESET_R                                           $15     !0, ->54
         26    > > FE_FETCH_R                                                   $15, !1, ->54
   43    27    >   NEW                                                  $16     'DateTime'
         28        CHECK_FUNC_ARG                                               
         29        FETCH_DIM_FUNC_ARG                                   $17     !1, 'bday'
         30        SEND_FUNC_ARG                                                $17
         31        DO_FCALL                                          0          
         32        ASSIGN                                                       !2, $16
   44    33        INIT_FCALL                                                   'timebetweentostring'
         34        INIT_FCALL                                                   'timebetween'
         35        FETCH_DIM_R                                          ~20     !1, 'bday'
         36        SEND_VAL                                                     ~20
         37        DO_FCALL                                          0  $21     
         38        SEND_VAR                                                     $21
         39        SEND_VAL                                                     '+%2B+'
         40        DO_FCALL                                          0  $22     
         41        CONCAT                                               ~23     'It%27s+been+', $22
         42        ROPE_INIT                                         3  ~26     'since+'
         43        FETCH_DIM_R                                          ~24     !1, 'name'
         44        ROPE_ADD                                          1  ~26     ~26, ~24
         45        ROPE_END                                          2  ~25     ~26, '+was+born+on+'
         46        CONCAT                                               ~28     ~23, ~25
         47        INIT_METHOD_CALL                                             !2, 'format'
         48        SEND_VAL_EX                                                  'D%2C+F+jS+'
         49        DO_FCALL                                          0  $29     
         50        CONCAT                                               ~30     ~28, $29
         51        CONCAT                                               ~31     ~30, '%0A'
         52        ECHO                                                         ~31
   42    53      > JMP                                                          ->26
         54    >   FE_FREE                                                      $15
   45    55      > RETURN                                                       1

Function timebetween:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/n8N8v
function name:  timeBetween
number of ops:  36
compiled vars:  !0 = $dob, !1 = $DAYS_IN_YEAR, !2 = $DAYS_IN_WEEK, !3 = $now, !4 = $birthDate, !5 = $totalDays
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   RECV                                                 !0      
    4     1        ASSIGN                                                       !1, 365
    5     2        ASSIGN                                                       !2, 7
    7     3        NEW                                                  $8      'DateTime'
          4        DO_FCALL                                          0          
          5        ASSIGN                                                       !3, $8
    8     6        NEW                                                  $11     'DateTime'
          7        SEND_VAR_EX                                                  !0
          8        DO_FCALL                                          0          
          9        ASSIGN                                                       !4, $11
    9    10        INIT_METHOD_CALL                                             !3, 'diff'
         11        SEND_VAR_EX                                                  !4
         12        DO_FCALL                                          0  $14     
         13        FETCH_OBJ_R                                          ~15     $14, 'days'
         14        ASSIGN                                                       !5, ~15
   12    15        INIT_FCALL                                                   'floor'
         16        DIV                                                  ~17     !5, !1
         17        SEND_VAL                                                     ~17
         18        DO_ICALL                                             $18     
         19        CAST                                              4  ~19     $18
         20        INIT_ARRAY                                           ~20     ~19, 'Year%28s%29'
   13    21        INIT_FCALL                                                   'floor'
         22        MOD                                                  ~21     !5, !1
         23        DIV                                                  ~22     ~21, !2
         24        SEND_VAL                                                     ~22
         25        DO_ICALL                                             $23     
         26        CAST                                              4  ~24     $23
         27        ADD_ARRAY_ELEMENT                                    ~20     ~24, 'Week%28s%29'
   14    28        MOD                                                  ~25     !5, !1
         29        CAST                                              4  ~26     ~25
         30        MOD                                                  ~27     ~26, !2
         31        ADD_ARRAY_ELEMENT                                    ~20     ~27, 'Day%28s%29'
         32        VERIFY_RETURN_TYPE                                           ~20
         33      > RETURN                                                       ~20
   16    34*       VERIFY_RETURN_TYPE                                           
         35*     > RETURN                                                       null

End of function timebetween

Function timebetweentostring:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/n8N8v
function name:  timeBetweenToString
number of ops:  22
compiled vars:  !0 = $timeBetween, !1 = $join_phrase, !2 = $result
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   18     0  E >   RECV                                                 !0      
          1        RECV_INIT                                            !1      '%2C+and+'
   20     2        INIT_FCALL                                                   'array_filter'
          3        SEND_VAR                                                     !0
          4        DO_ICALL                                             $3      
          5        ASSIGN                                                       !0, $3
   22     6        INIT_FCALL                                                   'array_reduce'
          7        INIT_FCALL                                                   'array_keys'
          8        SEND_VAR                                                     !0
          9        DO_ICALL                                             $5      
         10        SEND_VAR                                                     $5
         11        DECLARE_LAMBDA_FUNCTION                              ~6      [0]
         12        BIND_LEXICAL                                                 ~6, !0
   27    13        SEND_VAL                                                     ~6
         14        SEND_VAL                                                     <array>
   22    15        DO_ICALL                                             $7      
         16        ASSIGN                                                       !2, $7
   28    17        FRAMELESS_ICALL_2                implode             ~9      !1, !2
         18        VERIFY_RETURN_TYPE                                           ~9
         19      > RETURN                                                       ~9
   29    20*       VERIFY_RETURN_TYPE                                           
         21*     > RETURN                                                       null


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/n8N8v
function name:  {closure:timeBetweenToString():22}
number of ops:  12
compiled vars:  !0 = $results, !1 = $key, !2 = $timeBetween, !3 = $value
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
   22     0  E >   RECV                                                 !0      
          1        RECV                                                 !1      
          2        BIND_STATIC                                                  !2
   23     3        FETCH_DIM_R                                          ~4      !2, !1
          4        ASSIGN                                                       !3, ~4
   25     5        ROPE_INIT                                         3  ~8      !3
          6        ROPE_ADD                                          1  ~8      ~8, '+'
          7        ROPE_END                                          2  ~7      ~8, !1
          8        ASSIGN_DIM                                                   !0
          9        OP_DATA                                                      ~7
   26    10      > RETURN                                                       !0
   27    11*     > RETURN                                                       null

End of Dynamic Function 0

End of function timebetweentostring

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
130.25 ms | 497 KiB | 15 Q