Oto możliwa alternatywa dla Ciebie. strtotime
jest potężny i składnia zawiera naprawdę przydatne bity
jak kompleksowe sformułowanie względnej godziny i daty
.
Możesz go użyć do wygenerowania od pierwszego do N-tego określonego dnia tygodnia w określonym miesiącu, używając formatu „ z ”. Oto przykład przy użyciu date_create
wywołać DateTime
obiekt, ale zwykły stary strtotime
działa w ten sam sposób:
php > $d = date_create('Last Friday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Friday March 25 2011 00:00:00
php > $d = date_create('First Friday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Friday March 04 2011 00:00:00
php > $d = date_create('First Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 06 2011 00:00:00
php > $d = date_create('Fourth Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 27 2011 00:00:00
php > $d = date_create('Last Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday March 27 2011 00:00:00
Przekroczy również miesiąc, jeśli poprosisz o nieprawidłowy:
php > $d = date_create('Ninth Sunday of March 2011'); if($d instanceof DateTime) echo $d->format('l F d Y H:i:s');
Sunday May 01 2011 00:00:00
Pamiętaj, że działa tylko z liczbą porządkową sformułowanie. Niestety nie możesz zdać „1.” lub „3rd”.
Gdy użyjesz tego do pobrania właściwego N-tego dnia tygodnia, możesz po prostu dodać liczbę potrzebnych dni tygodnia do pominięcia (7 dla jednego tygodnia, 14 dla dwóch, 21 dla trzech itd.) zgodnie z wymaganiami do wyznaczonej daty zakończenia lub wyznaczonej liczby minęły tygodnie. Jeszcze raz strtotime
na ratunek, używając drugiego argumentu do połączenia względności:
php > echo date('l F d Y H:i:s', strtotime('+14 days', strtotime('First Thursday of March 2011')));
Thursday March 17 2011 00:00:00
(Moja kopia lokalna zaakceptowała również '+14 days First Thursday of March 2011'
, ale to było trochę dziwne.)