3v4l.org

run code in 300+ PHP versions simultaneously
<?php ini_set('display_errors', 'on'); define('DAY_WORK', 32400); // 9 * 60 * 60 define('HOUR_START_DAY', '08:30:00'); define('HOUR_END_DAY', '18:00:00'); // get begin and end dates of the full period $date_begin = '2015-10-04 08:00:00'; $date_end = '2015-10-05 18:00:00'; // keep the initial dates for later use $d1 = new DateTime($date_begin); $d2 = new DateTime($date_end); // and get the datePeriod from the 1st to the last day $period_start = new DateTime($d1->format('Y-m-d 00:00:00')); $period_end = new DateTime($d2->format('Y-m-d 23:59:59')); $interval = new DateInterval('P1D'); //$interval = new DateInterval('weekdays'); // 1 day interval to get all days between the period $period = new DatePeriod($period_start, $interval, $period_end); $worked_time = 0; $nb = 0; // for every worked day, add the hours you want foreach($period as $date){ $week_day = $date->format('w'); // 0 (for Sunday) through 6 (for Saturday) if (!in_array($week_day,array(0, 6))) { // if this is the first day or the last dy, you have to count only the worked hours if ($date->format('Y-m-d') == $d1->format('Y-m-d')) { $end_of_day_format = $date->format('Y-m-d '.HOUR_END_DAY); $d1_format = $d1->format('Y-m-d H:i:s'); $end_of_day = new DateTime($end_of_day_format); $diff = $end_of_day->diff($d1)->format("%H:%I:%S"); $diff = split(':', $diff); $diff = $diff[0]*3600 + $diff[1]*60 + $diff[0]; $worked_time += $diff; } else if ($date->format('Y-m-d') == $d2->format('Y-m-d')) { $start_of_day = new DateTime($date->format('Y-m-d '.HOUR_START_DAY)); $d2_format = $d2->format('Y-m-d H:i:s'); $end_of_day = new DateTime($end_of_day_format); $diff = $start_of_day->diff($d2)->format('%H:%I:%S'); $diff = split(':', $diff); $diff = $diff[0]*3600 + $diff[1]*60 + $diff[0]; $worked_time += $diff; } else { // otherwise, just count the full day of work $worked_time += DAY_WORK; } } if ($nb> 10) die("die ".$nb); } echo sprintf('Works from %s to %s, You worked %d hour(s)', $date_begin, $date_end, $worked_time/60/60);
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 53, Position 2 = 162
Branch analysis from position: 53
2 jumps found. (Code = 78) Position 1 = 54, Position 2 = 162
Branch analysis from position: 54
2 jumps found. (Code = 43) Position 1 = 64, Position 2 = 157
Branch analysis from position: 64
2 jumps found. (Code = 43) Position 1 = 72, Position 2 = 108
Branch analysis from position: 72
1 jumps found. (Code = 42) Position 1 = 157
Branch analysis from position: 157
2 jumps found. (Code = 43) Position 1 = 159, Position 2 = 161
Branch analysis from position: 159
1 jumps found. (Code = 79) Position 1 = -2
Branch analysis from position: 161
1 jumps found. (Code = 42) Position 1 = 53
Branch analysis from position: 53
Branch analysis from position: 108
2 jumps found. (Code = 43) Position 1 = 116, Position 2 = 155
Branch analysis from position: 116
1 jumps found. (Code = 42) Position 1 = 157
Branch analysis from position: 157
Branch analysis from position: 155
2 jumps found. (Code = 43) Position 1 = 159, Position 2 = 161
Branch analysis from position: 159
Branch analysis from position: 161
Branch analysis from position: 157
Branch analysis from position: 162
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 162
filename:       /in/UNRQe
function name:  (null)
number of ops:  173
compiled vars:  !0 = $date_begin, !1 = $date_end, !2 = $d1, !3 = $d2, !4 = $period_start, !5 = $period_end, !6 = $interval, !7 = $period, !8 = $worked_time, !9 = $nb, !10 = $date, !11 = $week_day, !12 = $end_of_day_format, !13 = $d1_format, !14 = $end_of_day, !15 = $diff, !16 = $start_of_day, !17 = $d2_format
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    2     0  E >   INIT_FCALL                                               'ini_set'
          1        SEND_VAL                                                 'display_errors'
          2        SEND_VAL                                                 'on'
          3        DO_ICALL                                                 
    4     4        INIT_FCALL                                               'define'
          5        SEND_VAL                                                 'DAY_WORK'
          6        SEND_VAL                                                 32400
          7        DO_ICALL                                                 
    5     8        INIT_FCALL                                               'define'
          9        SEND_VAL                                                 'HOUR_START_DAY'
         10        SEND_VAL                                                 '08%3A30%3A00'
         11        DO_ICALL                                                 
    6    12        INIT_FCALL                                               'define'
         13        SEND_VAL                                                 'HOUR_END_DAY'
         14        SEND_VAL                                                 '18%3A00%3A00'
         15        DO_ICALL                                                 
    8    16        ASSIGN                                                   !0, '2015-10-04+08%3A00%3A00'
    9    17        ASSIGN                                                   !1, '2015-10-05+18%3A00%3A00'
   12    18        NEW                                              $24     'DateTime'
         19        SEND_VAR_EX                                              !0
         20        DO_FCALL                                      0          
         21        ASSIGN                                                   !2, $24
   13    22        NEW                                              $27     'DateTime'
         23        SEND_VAR_EX                                              !1
         24        DO_FCALL                                      0          
         25        ASSIGN                                                   !3, $27
   16    26        NEW                                              $30     'DateTime'
         27        INIT_METHOD_CALL                                         !2, 'format'
         28        SEND_VAL_EX                                              'Y-m-d+00%3A00%3A00'
         29        DO_FCALL                                      0  $31     
         30        SEND_VAR_NO_REF_EX                                       $31
         31        DO_FCALL                                      0          
         32        ASSIGN                                                   !4, $30
   17    33        NEW                                              $34     'DateTime'
         34        INIT_METHOD_CALL                                         !3, 'format'
         35        SEND_VAL_EX                                              'Y-m-d+23%3A59%3A59'
         36        DO_FCALL                                      0  $35     
         37        SEND_VAR_NO_REF_EX                                       $35
         38        DO_FCALL                                      0          
         39        ASSIGN                                                   !5, $34
   18    40        NEW                                              $38     'DateInterval'
         41        SEND_VAL_EX                                              'P1D'
         42        DO_FCALL                                      0          
         43        ASSIGN                                                   !6, $38
   20    44        NEW                                              $41     'DatePeriod'
         45        SEND_VAR_EX                                              !4
         46        SEND_VAR_EX                                              !6
         47        SEND_VAR_EX                                              !5
         48        DO_FCALL                                      0          
         49        ASSIGN                                                   !7, $41
   22    50        ASSIGN                                                   !8, 0
   23    51        ASSIGN                                                   !9, 0
   25    52      > FE_RESET_R                                       $46     !7, ->162
         53    > > FE_FETCH_R                                               $46, !10, ->162
   26    54    >   INIT_METHOD_CALL                                         !10, 'format'
         55        SEND_VAL_EX                                              'w'
         56        DO_FCALL                                      0  $47     
         57        ASSIGN                                                   !11, $47
   27    58        INIT_FCALL                                               'in_array'
         59        SEND_VAR                                                 !11
         60        SEND_VAL                                                 <array>
         61        DO_ICALL                                         $49     
         62        BOOL_NOT                                         ~50     $49
         63      > JMPZ                                                     ~50, ->157
   30    64    >   INIT_METHOD_CALL                                         !10, 'format'
         65        SEND_VAL_EX                                              'Y-m-d'
         66        DO_FCALL                                      0  $51     
         67        INIT_METHOD_CALL                                         !2, 'format'
         68        SEND_VAL_EX                                              'Y-m-d'
         69        DO_FCALL                                      0  $52     
         70        IS_EQUAL                                                 $51, $52
         71      > JMPZ                                                     ~53, ->108
   32    72    >   INIT_METHOD_CALL                                         !10, 'format'
         73        FETCH_CONSTANT                                   ~54     'HOUR_END_DAY'
         74        CONCAT                                           ~55     'Y-m-d+', ~54
         75        SEND_VAL_EX                                              ~55
         76        DO_FCALL                                      0  $56     
         77        ASSIGN                                                   !12, $56
   33    78        INIT_METHOD_CALL                                         !2, 'format'
         79        SEND_VAL_EX                                              'Y-m-d+H%3Ai%3As'
         80        DO_FCALL                                      0  $58     
         81        ASSIGN                                                   !13, $58
   34    82        NEW                                              $60     'DateTime'
         83        SEND_VAR_EX                                              !12
         84        DO_FCALL                                      0          
         85        ASSIGN                                                   !14, $60
   35    86        INIT_METHOD_CALL                                         !14, 'diff'
         87        SEND_VAR_EX                                              !2
         88        DO_FCALL                                      0  $63     
         89        INIT_METHOD_CALL                                         $63, 'format'
         90        SEND_VAL_EX                                              '%25H%3A%25I%3A%25S'
         91        DO_FCALL                                      0  $64     
         92        ASSIGN                                                   !15, $64
   36    93        INIT_FCALL_BY_NAME                                       'split'
         94        SEND_VAL_EX                                              '%3A'
         95        SEND_VAR_EX                                              !15
         96        DO_FCALL                                      0  $66     
         97        ASSIGN                                                   !15, $66
   37    98        FETCH_DIM_R                                      ~68     !15, 0
         99        MUL                                              ~69     ~68, 3600
        100        FETCH_DIM_R                                      ~70     !15, 1
        101        MUL                                              ~71     ~70, 60
        102        ADD                                              ~72     ~69, ~71
        103        FETCH_DIM_R                                      ~73     !15, 0
        104        ADD                                              ~74     ~72, ~73
        105        ASSIGN                                                   !15, ~74
   38   106        ASSIGN_OP                                     1          !8, !15
        107      > JMP                                                      ->157
   40   108    >   INIT_METHOD_CALL                                         !10, 'format'
        109        SEND_VAL_EX                                              'Y-m-d'
        110        DO_FCALL                                      0  $77     
        111        INIT_METHOD_CALL                                         !3, 'format'
        112        SEND_VAL_EX                                              'Y-m-d'
        113        DO_FCALL                                      0  $78     
        114        IS_EQUAL                                                 $77, $78
        115      > JMPZ                                                     ~79, ->155
   42   116    >   NEW                                              $80     'DateTime'
        117        INIT_METHOD_CALL                                         !10, 'format'
        118        FETCH_CONSTANT                                   ~81     'HOUR_START_DAY'
        119        CONCAT                                           ~82     'Y-m-d+', ~81
        120        SEND_VAL_EX                                              ~82
        121        DO_FCALL                                      0  $83     
        122        SEND_VAR_NO_REF_EX                                       $83
        123        DO_FCALL                                      0          
        124        ASSIGN                                                   !16, $80
   43   125        INIT_METHOD_CALL                                         !3, 'format'
        126        SEND_VAL_EX                                              'Y-m-d+H%3Ai%3As'
        127        DO_FCALL                                      0  $86     
        128        ASSIGN                                                   !17, $86
   44   129        NEW                                              $88     'DateTime'
        130        SEND_VAR_EX                                              !12
        131        DO_FCALL                                      0          
        132        ASSIGN                                                   !14, $88
   45   133        INIT_METHOD_CALL                                         !16, 'diff'
        134        SEND_VAR_EX                                              !3
        135        DO_FCALL                                      0  $91     
        136        INIT_METHOD_CALL                                         $91, 'format'
        137        SEND_VAL_EX                                              '%25H%3A%25I%3A%25S'
        138        DO_FCALL                                      0  $92     
        139        ASSIGN                                                   !15, $92
   46   140        INIT_FCALL_BY_NAME                                       'split'
        141        SEND_VAL_EX                                              '%3A'
        142        SEND_VAR_EX                                              !15
        143        DO_FCALL                                      0  $94     
        144        ASSIGN                                                   !15, $94
   47   145        FETCH_DIM_R                                      ~96     !15, 0
        146        MUL                                              ~97     ~96, 3600
        147        FETCH_DIM_R                                      ~98     !15, 1
        148        MUL                                              ~99     ~98, 60
        149        ADD                                              ~100    ~97, ~99
        150        FETCH_DIM_R                                      ~101    !15, 0
        151        ADD                                              ~102    ~100, ~101
        152        ASSIGN                                                   !15, ~102
   48   153        ASSIGN_OP                                     1          !8, !15
        154      > JMP                                                      ->157
   53   155    >   FETCH_CONSTANT                                   ~105    'DAY_WORK'
        156        ASSIGN_OP                                     1          !8, ~105
   56   157    >   IS_SMALLER                                               10, !9
        158      > JMPZ                                                     ~107, ->161
   57   159    >   CONCAT                                           ~108    'die+', !9
        160      > EXIT                                                     ~108
   25   161    > > JMP                                                      ->53
        162    >   FE_FREE                                                  $46
   59   163        INIT_FCALL                                               'sprintf'
        164        SEND_VAL                                                 'Works+from+%25s+to+%25s%2C+You+worked+%25d+hour%28s%29'
        165        SEND_VAR                                                 !0
        166        SEND_VAR                                                 !1
        167        DIV                                              ~109    !8, 60
        168        DIV                                              ~110    ~109, 60
        169        SEND_VAL                                                 ~110
        170        DO_ICALL                                         $111    
        171        ECHO                                                     $111
        172      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
174.01 ms | 1412 KiB | 21 Q