これがあなたのための可能な代替案です。 strtotime
は強力で、構文には非常に便利なビットが含まれています
包括的な相対的な時間と日付の表現
のように 。
「の」の形式を使用して、特定の月の最初からN番目の特定の平日を生成するために使用できます。これは、 date_create
を使用した例です。
DateTime
を呼び出す オブジェクトですが、通常の古いstrtotime
同じように機能します:
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
無効なものを要求した場合も、その月はオーバーフローします:
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
序数 でのみ機能することに注意してください。 言葉遣い。残念ながら、「1位」または「3位」を通過することはできません。
これを使用して適切なN番目の平日を取得したら、必要に応じて、指定された終了日または指定された数までスキップする必要のある平日の数(1週間は7、2は14、3は21など)を追加できます。数週間が経過しました。もう一度、strtotime
2番目の引数を使用して相対性を連鎖させて救助します:
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
(私のローカルコピーも受け入れました'+14 days First Thursday of March 2011'
、しかしそれはちょっと奇妙に感じました。)