Выборка метки времени полуночи перед заданной меткой времени

#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
?>