Просто 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: