Мне кажется, что это должно повториться 11 часов, но возвращается 12; что мне не хватает?
$start_time = "06:00";
$end_time = "17:00";
$LOD = date("H:i", ((strtotime($end_time) - strtotime($start_time))));
echo "Length of day: " . $LOD . " hours";
Обновление: работает на моем MBPro в среде MAMP; системное время установлено на 24 часа.
С помощью date
этот путь не имеет никакого смысла.
Если вы хотите минимальный смысл, то вы должны добавить strtotime("00:00")
как ваше начальное время.
(end - start) + init
Проблема заключается здесь:
date_default_timezone_set('Asia/Singapore');
echo date('r', strtotime('06:00')); // Mon, 25 May 2015 06:00:00 +0800
date_default_timezone_set('America/Denver');
echo date('r', strtotime('06:00')); // Sun, 24 May 2015 06:00:00 -0600
Заметьте, как дата изменилась на один день после смены часового пояса? Это потому что дата, которую вы поставляете strtotime()
являются относительными датами, поэтому вам нужно «заземлить» их относительно начала дня:
echo date('H:i', strtotime('17:00') - strtotime('06:00') + strtotime('00:00'));
Или используйте DateTime:
$t1 = new DateTime('06:00');
$t2 = new DateTime('17:00');
echo $t2->diff($t1)->format('%H:%I');
Потому что это изменится на время вашего php локального сервера.
Попробуй это
<?php
$start_time = "06:30";
$end_time = "17:50";
$default_time = "00:00";
$LOD = date("H:i", (strtotime($default_time)+(strtotime($end_time) - strtotime($start_time))));
echo "Length of day: " . $LOD . " hours";
echo "<br>";
$diff = strtotime($end_time) - strtotime($start_time);
$hour = floor($diff / 3600);
$minute = ($diff % 3600) / 60;
echo "Length of day: " . $hour . ":" . $minute . " hours";
?>