Округление временной метки PHP - PullRequest
4 голосов
/ 02 августа 2011

Что было бы хорошим решением для округления метки времени до часа?

Например, после использования date('d.m.y h:m', time()) я получаю '02 .08.11 7:07' ... Теперь я хотел бы получить метку времени на 7:00.

Как мне этого добиться?

Ответы [ 4 ]

14 голосов
/ 02 августа 2011

Обновление

После просмотра "Основы программирования времени" Грега Миллера о библиотеке Google C cctz , я не удовлетворен своим предыдущим ответом.

Время обработки - очень сложная тема (даже если не учитывать релятивистские эффекты).Мы должны соблюдать такие вещи, как часовые пояса с неравномерным смещением , переход на летнее время , скачки времени из-за изменений в законодательстве или високосных секунд и, вероятно,еще много причуд.Хотя многие из них имеют только локальный эффект во времени и пространстве, пользователи наших программ все еще могут быть невезучими, чтобы их затронуть.

TL; DR

Вероятно, лучше полагаться на лежащие в основеработает как ответ holodoc , чтобы обработать причуды управления часовым поясом.

Старый ответ

Когда я правильно помню, отметка времени началась ровно в 0:00 1.1.1970, поэтомудолжно быть достаточно, чтобы разделить его на 3600 (плавающий), затем округлить / пол / потолок и умножить на 3600 (целое число).Деление должно быть плавающей точкой, чтобы раунд / потолок работали.

Образец округления:

round($timestamp/3600)*3600
7:20 -> 7:00
7:40 -> 8:00

Образец покрытия:

floor($timestamp/3600)*3600
7:20 -> 7:00
7:40 -> 7:00

Образец потолка:

ceil($timestamp/3600)*3600
7:20 -> 8:00
7:40 -> 8:00
2 голосов
/ 02 августа 2011

Когда-нибудь задумывались об удалении минут?:)

echo date('d.m.y h:00', time());

Если вам нужна временная метка начальной минуты, просто немного измените аргумент data и используйте strtotime .

echo strtotime(date('d.m.Y H:00:00', time()));
1 голос
/ 02 августа 2011

Самое простое решение:

date('d.m.y h', time());

Очень редко можно увидеть любые временные метки, когда время округляется.Если отметка времени показывает 7:00 - это означает, что это произошло в 7-й час, в любое время.Если вы начнете округлять временные метки, люди будут интерпретировать это как происшедшее в любое время в течение 8-го часа ... что может привести к путанице.

1 голос
/ 02 августа 2011

Захватите час и минуту в 2 разных переменных. Если минуты> = 30, то добавьте единицу к часу.

Не самое элегантное решение, но оно работает. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...