#php #timestamp
#php #временная метка
Вопрос:
Учитывая любую временную метку unix T, я хочу получить временную метку полуночи перед T.
Заданная временная метка может быть любым целым числом: сейчас, сегодня, (не слишком далеко []) в будущем или (не слишком далеко []) в прошлом.
Есть ли более чистый способ (псевдокод):
<?php
$midnight = strtotime("{date('d',$ts)}-{date('m',$ts)}-{date('Y', $ts)} midnight");
?>
Спасибо.
[*] где-то между 1990 и 2020 годами.
Ответ №1:
Я бы сделал это как
$midnight = strtotime(date('Y-m-d',$ts).' 00:00:00');
… но является ли это более чистым / лучшим, является спорным…
Комментарии:
1. Спасибо. Я боялся, что маршрут через strtotime был единственным «прагматичным» подходом. Ваш самый чистый из них.
Ответ №2:
Поскольку полный день составляет 86400 секунд, вы должны быть в состоянии это сделать:
$midnight = $ts - $ts%86400;
Однако при этом не будут учитываться какие-либо високосные секунды, которые могли быть применены к временной метке unix.
Это было бы намного эффективнее, чем использование strtotime, но, вероятно, имело бы значение, только если бы вы делали это в больших сжатых циклах.
Ответ №3:
Et voila’
<?php
$midnight = strtotime(date('d-m-Y',$ts));
echo date('d-m-Y H:i:s',$ts); // output 03-11-2011 12:43:41
echo date('d-m-Y H:i:s',$midnight); // ouput 03-11-2011 00:00:00
?>