Обновление
После просмотра "Основы программирования времени" Грега Миллера о библиотеке 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