Just 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();
Najpierw tworzony jest obiekt DateTime, a sygnatura czasowa jest ustawiana na żądany znacznik czasu. Następnie obiekt jest formatowany jako ciąg znaków określający godzinę / minutę / sekundę na początek lub koniec dnia. Na koniec tworzony jest nowy obiekt DateTime z tego ciągu i pobierany jest znacznik czasu.
Czytelny
$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();
Koniec dnia możemy uzyskać w alternatywny sposób korzystając z tej dłuższej wersji:
$endOfDayObject = clone $beginOfDayOject();
$endOfDayObject->add(new DateInterval('P1D'))->sub(new DateInterval('PT1S'));
$endOfDay = $endOfDayOject->getTimestamp();
Strefa czasowa
Strefę czasową można również ustawić, dodając wskaźnik czasu do formatu, na przykład O
i określając sygnaturę czasową po utworzeniu obiektu 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();
Elastyczność DateTime
Możemy również uzyskać inne informacje, takie jak początek / koniec miesiąca lub początek / koniec godziny, zmieniając drugi określony format. Przez miesiąc: 'Y-m-01 00:00:00'
i 'Y-m-t 23:59:59'
. Na godzinę: 'Y-m-d H:00:00'
i'Y-m-d H:59:59'
Używając różnych formatów w połączeniu z obiektami add () / sub () i DateInterval, możemy uzyskać początek lub koniec dowolnego okresu, chociaż należy zachować ostrożność, aby poprawnie obsłużyć lata przestępne.
Odpowiednie linki
Z dokumentacji PHP: