Просто DateTime
$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 00:00:00'))->getTimestamp();
$endOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 23:59:59'))->getTimestamp();
Сначала создается объект DateTime, и в качестве метки времени устанавливается желаемая метка времени. Затем объект форматируется как строка, устанавливающая час / минуту / секунду для начала или конца дня. Наконец, из этой строки создается новый объект DateTime и извлекается метка времени.
Удобочитаемый
$dateTimeObject = new DateTime();
$dateTimeObject->setTimestamp($timestamp);
$beginOfDayString = $dateTimeObject->format('Y-m-d 00:00:00');
$beginOfDayObject = DateTime::createFromFormat('Y-m-d H:i:s', $beginOfDayString);
$beginOfDay = $beginOfDayObject->getTimestamp();
Мы можем получить конец дня альтернативным способом, используя эту более длинную версию:
$endOfDayObject = clone $beginOfDayOject();
$endOfDayObject->add(new DateInterval('P1D'))->sub(new DateInterval('PT1S'));
$endOfDay = $endOfDayOject->getTimestamp();
Часовой пояс
Часовой пояс также можно установить, добавив индикатор отметки времени к формату, например, O
и указав отметку времени после создания объекта DateTime:
$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s O', (new DateTime())->setTimezone(new DateTimeZone('America/Los_Angeles'))->setTimestamp($timestamp)->format('Y-m-d 00:00:00 O'))->getTimestamp();
Гибкость DateTime
Мы также можем получить другую информацию, такую как начало / конец месяца или начало / конец часа, изменив второй указанный формат. За месяц: 'Y-m-01 00:00:00'
а 'Y-m-t 23:59:59'
. В течение часа: 'Y-m-d H:00:00'
и'Y-m-d H:59:59'
Используя различные форматы в сочетании с объектами add () / sub () и DateInterval, мы можем получить начало или конец любого периода, хотя для правильной обработки високосных лет потребуется определенная осторожность.
Соответствующие ссылки
Из документов PHP: