3v4l.org

run code in 300+ PHP versions simultaneously
<?php date_default_timezone_set('Australia/Sydney'); // Initial datetimes $date1 = new DateTime('2012-03-22 11:29:16'); $date2 = new DateTime('2012-03-24 03:58:58'); // Set first datetime to midnight of next day $start = clone $date1; $start->modify('+1 day'); $start->modify('midnight'); // Set second datetime to midnight of that day $end = clone $date2; $end->modify('midnight'); // Count the number of full days between both dates $days = 0; // Loop through each day between two dates $interval = new DateInterval('P1D'); $period = new DatePeriod($start, $interval, $end); foreach ($period as $dt) { // If it is a weekend don't count it if (!in_array($dt->format('l'), array('Saturday', 'Sunday'))) { $days++; } } // Assume 8 hour workdays $hours = $days * 8; // Get the number of hours worked on the first day $date1->modify('5:30 PM'); $diff = $date1->diff($start); $hours += $diff->h; // Get the number of hours worked the second day $date1->modify('8 AM'); $diff = $date2->diff($end); $hours += $diff->h; echo $hours;
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 36, Position 2 = 45
Branch analysis from position: 36
2 jumps found. (Code = 78) Position 1 = 37, Position 2 = 45
Branch analysis from position: 37
2 jumps found. (Code = 43) Position 1 = 43, Position 2 = 44
Branch analysis from position: 43
1 jumps found. (Code = 42) Position 1 = 36
Branch analysis from position: 36
Branch analysis from position: 44
Branch analysis from position: 45
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 45
filename:       /in/K3HmU
function name:  (null)
number of ops:  68
compiled vars:  !0 = $date1, !1 = $date2, !2 = $start, !3 = $end, !4 = $days, !5 = $interval, !6 = $period, !7 = $dt, !8 = $hours, !9 = $diff
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    2     0  E >   INIT_FCALL                                               'date_default_timezone_set'
          1        SEND_VAL                                                 'Australia%2FSydney'
          2        DO_ICALL                                                 
    5     3        NEW                                              $11     'DateTime'
          4        SEND_VAL_EX                                              '2012-03-22+11%3A29%3A16'
          5        DO_FCALL                                      0          
          6        ASSIGN                                                   !0, $11
    6     7        NEW                                              $14     'DateTime'
          8        SEND_VAL_EX                                              '2012-03-24+03%3A58%3A58'
          9        DO_FCALL                                      0          
         10        ASSIGN                                                   !1, $14
    9    11        CLONE                                            ~17     !0
         12        ASSIGN                                                   !2, ~17
   10    13        INIT_METHOD_CALL                                         !2, 'modify'
         14        SEND_VAL_EX                                              '%2B1+day'
         15        DO_FCALL                                      0          
   11    16        INIT_METHOD_CALL                                         !2, 'modify'
         17        SEND_VAL_EX                                              'midnight'
         18        DO_FCALL                                      0          
   14    19        CLONE                                            ~21     !1
         20        ASSIGN                                                   !3, ~21
   15    21        INIT_METHOD_CALL                                         !3, 'modify'
         22        SEND_VAL_EX                                              'midnight'
         23        DO_FCALL                                      0          
   18    24        ASSIGN                                                   !4, 0
   21    25        NEW                                              $25     'DateInterval'
         26        SEND_VAL_EX                                              'P1D'
         27        DO_FCALL                                      0          
         28        ASSIGN                                                   !5, $25
   22    29        NEW                                              $28     'DatePeriod'
         30        SEND_VAR_EX                                              !2
         31        SEND_VAR_EX                                              !5
         32        SEND_VAR_EX                                              !3
         33        DO_FCALL                                      0          
         34        ASSIGN                                                   !6, $28
   23    35      > FE_RESET_R                                       $31     !6, ->45
         36    > > FE_FETCH_R                                               $31, !7, ->45
   25    37    >   INIT_METHOD_CALL                                         !7, 'format'
         38        SEND_VAL_EX                                              'l'
         39        DO_FCALL                                      0  $32     
         40        IN_ARRAY                                         ~33     $32, <array>
         41        BOOL_NOT                                         ~34     ~33
         42      > JMPZ                                                     ~34, ->44
   26    43    >   PRE_INC                                                  !4
   23    44    > > JMP                                                      ->36
         45    >   FE_FREE                                                  $31
   31    46        MUL                                              ~36     !4, 8
         47        ASSIGN                                                   !8, ~36
   34    48        INIT_METHOD_CALL                                         !0, 'modify'
         49        SEND_VAL_EX                                              '5%3A30+PM'
         50        DO_FCALL                                      0          
   35    51        INIT_METHOD_CALL                                         !0, 'diff'
         52        SEND_VAR_EX                                              !2
         53        DO_FCALL                                      0  $39     
         54        ASSIGN                                                   !9, $39
   36    55        FETCH_OBJ_R                                      ~41     !9, 'h'
         56        ASSIGN_OP                                     1          !8, ~41
   39    57        INIT_METHOD_CALL                                         !0, 'modify'
         58        SEND_VAL_EX                                              '8+AM'
         59        DO_FCALL                                      0          
   40    60        INIT_METHOD_CALL                                         !1, 'diff'
         61        SEND_VAR_EX                                              !3
         62        DO_FCALL                                      0  $44     
         63        ASSIGN                                                   !9, $44
   41    64        FETCH_OBJ_R                                      ~46     !9, 'h'
         65        ASSIGN_OP                                     1          !8, ~46
   43    66        ECHO                                                     !8
         67      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
154.04 ms | 1392 KiB | 15 Q