2013-12-02 4 views
1

Я получаю результат я не ожидал от gmdate()PHP - gmdate() и Большие Целые

<?php 
$secs = 175707; 
echo gmdate("H:i:s", $secs); // result: 00:48:27 
?> 

В результате 00:48:27, что далеко. Похоже, часы уходят с позиции. Я подозреваю, что так?

ответ

2

gmdate работает по датам, а не по времени. Другими словами, ваша временная метка интерпретируется как момент времени в начале 3 января 1970 года (в частности, 00:00:00 1 января 1970 года + 15707 секунд = 00:48:27 3 января 1970 года). Это - то, откуда приходит ваш 00:48:27.


gmdatedate) не предназначены для использования таким образом. Если вы просто хотите рассчитать часы/минуты/секунды в зависимости от количества секунд, вычислить их непосредственно:

$seconds = 175707; 
$hours = floor($seconds/3600); 
$seconds -= $hours * 3600; 
$minutes = floor($seconds/60); 
$seconds -= $minutes * 60; 

echo "$hours:$minutes:$seconds"; //48:48:27 

сделать примечание, что это не работает с гражданскими днями. Это связано с летним временем. День не всегда 24 часа. Иногда это 23, а иногда и 25, когда DST вступает в силу или заканчивается. С днями как единица измерения (т. Е. День всегда 24 часа), это работает. Например, 10 марта - 23 часа, а 3 ноября - 25 часов в Соединенных Штатах. Если вы довольны статическими 24-часовыми днями, то, конечно же, будет работать тот же подход.

0

gmdate() ожидает отметку времени UNIX - секунды с января 1/1970. Вы прошли в эквиваленте Saturday, Jan 3rd, 1970, 12:48:27am.

например. попробуйте это:

echo gmdate('r', 175707); 
0

Из manual

времени вернулся в Среднее время по Гринвичу (GMT)

Так что если вы в КЭТ (GMT +1) это действительно будет дайте вам час 0.

0

Посмотрите на это, если вы хотите увидеть, куда идете не так:

echo date("d-M-Y H:i:s", 175707); 

Это даст выход 03-Jan-1970 00:48:27. т.е. 175707 seconds с 00:00:00 1 января 1970 года = 03-Jan-1970 00:48:27.

Смежные вопросы