3v4l.org

run code in 300+ PHP versions simultaneously
<?php // 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++; } } print "<pre>"; print_r($period); print "</pre>"; // 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;
Output for 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
<pre>DatePeriod Object ( [start] => DateTime Object ( [date] => 2012-03-23 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [current] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [end] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [interval] => DateInterval Object ( [y] => 0 [m] => 0 [d] => 1 [h] => 0 [i] => 0 [s] => 0 [f] => 0 [invert] => 0 [days] => [from_string] => ) [recurrences] => 1 [include_start_date] => 1 [include_end_date] => ) </pre>17
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 <pre>DatePeriod Object ( [start] => DateTime Object ( [date] => 2012-03-23 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [current] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [end] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [interval] => DateInterval Object ( [y] => 0 [m] => 0 [d] => 1 [h] => 0 [i] => 0 [s] => 0 [f] => 0 [invert] => 0 [days] => [from_string] => ) [recurrences] => 1 [include_start_date] => 1 [include_end_date] => ) </pre>17
Output for 7.1.0 - 7.1.25, 7.2.0 - 7.2.33, 7.3.0 - 7.3.31, 7.4.0 - 7.4.33, 8.0.0 - 8.0.12, 8.0.14 - 8.0.30, 8.1.0 - 8.1.28
<pre>DatePeriod Object ( [start] => DateTime Object ( [date] => 2012-03-23 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [current] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [end] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [interval] => DateInterval Object ( [y] => 0 [m] => 0 [d] => 1 [h] => 0 [i] => 0 [s] => 0 [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) [recurrences] => 1 [include_start_date] => 1 ) </pre>17
Output for 7.3.32 - 7.3.33, 8.0.13
<pre>DatePeriod Object ( [start] => DateTime Object ( [date] => 2012-03-23 00:00:00.000000 [timezone_type] => 3 [timezone] => UTC ) [current] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => UTC ) [end] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => UTC ) [interval] => DateInterval Object ( [y] => 0 [m] => 0 [d] => 1 [h] => 0 [i] => 0 [s] => 0 [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) [recurrences] => 1 [include_start_date] => 1 ) </pre>17
Output for 5.4.30 - 5.4.45, 5.5.14 - 5.5.38, 5.6.0 - 5.6.38, 7.0.0 - 7.0.33
<pre>DatePeriod Object ( [start] => DateTime Object ( [date] => 2012-03-23 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [current] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [end] => DateTime Object ( [date] => 2012-03-24 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [interval] => DateInterval Object ( [y] => 0 [m] => 0 [d] => 1 [h] => 0 [i] => 0 [s] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) [recurrences] => 1 [include_start_date] => 1 ) </pre>17
Output for 5.4.17 - 5.4.29, 5.5.0 - 5.5.13
<pre>DatePeriod Object ( [start] => DateTime Object ( [date] => 2012-03-23 00:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [current] => DateTime Object ( [date] => 2012-03-24 00:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [end] => DateTime Object ( [date] => 2012-03-24 00:00:00 [timezone_type] => 3 [timezone] => Europe/Amsterdam ) [interval] => DateInterval Object ( [y] => 0 [m] => 0 [d] => 1 [h] => 0 [i] => 0 [s] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 ) [recurrences] => 1 [include_start_date] => 1 ) </pre>17
Output for 5.4.0 - 5.4.16
<pre>DatePeriod Object ( ) </pre>17

preferences:
248.47 ms | 401 KiB | 339 Q