2014-02-10 3 views
0

Я хочу сделать некоторые операции с двумя часами, хранящимися в варах. Сначала я конвертирую в миллисекунды, делаю операции, а затем конвертирую обратно в что-то читаемое. Кажется, что это работает, но окончательное число неверно. В этом примере это дает мне 1:30:00 разницы. Может кто-нибудь объяснить, почему?От строки до миллисекунд и обратно

// I have two hours that come from a MySql database and I store in a var: 
$start= "16:00:00"; 
$end= "16:30:00"; 

// I convert to milliseconds and rest: 
$startMili = strtotime($start); 
$endMili = strtotime($end); 
$dif = $endMili - $startMili ; 

// convert to something readable: 
echo "<br><br> diference: "; 
$readable = date("H:i:s", $dif); 
echo $readable; 
+0

_strtotime_ и _date_ функции предназначены для абсолютных отметок времени, а не интервалов! Дополнительный час может быть получен из настроек часового пояса (_date_default_timezone_set_). Может быть, вы можете использовать функцию _TIMEDIFF_ непосредственно в вашем SQL-запросе? –

+0

Когда я пробую свой код, я получаю правильный результат от 0:30:00 – Perry

+0

@Perry. Странно. Возможно, это часовой пояс, как говорит Петр. Я в Барселоне. Где ты? – Nrc

ответ

1

Вы также можете использовать DATETIME вместо StrToTime

см ниже примере

$datetime1 = new DateTime($start, new DateTimeZone('Europe/Amsterdam')); 
$datetime2 = new DateTime($end, new DateTimeZone('Europe/Amsterdam')); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%H:%i:%s'); 
Смежные вопросы