2

日時から第 2 木曜日を取得しようとしています。

コード

 $test = new DateTime('2013-08-02 10:00');
 echo $test->modify('second thursday'.$test->format('H:i'))->format('Y-m-d H:i');

上記のコードは2013-08-15 10:00代わりに戻ります2013-08-08 10:00

しかし、次のコードを使用すると正しく動作します

 $test = new DateTime('2013-08-02 10:00');
 echo $test->modify('second wednesday'.$test->format('H:i'))->format('Y-m-d H:i');
4

4 に答える 4

1

の月の最初の日は2013-AugustですThursday

そして、コードにバグがあり、最初の日が の場合、最初ThursdayThursday次の週に来る、つまり8-August賢明な 2 日second Thursdayが来る15-August

このコードが役立ちます

echo date('Y-m-d', strtotime('second thursday of august 2013'));

更新されたコード

 $test = new DateTime('2013-08-02 10:00');
echo date('Y-m-d', strtotime("second thursday of august 2013")).' '.$test->format('H:i');

RCにより追加

PHP strtotime マニュアルページから

5.2.7 より前の PHP 5 では、その月の最初の日がその月の特定の曜日の特定の発生を要求すると、返されるタイムスタンプに誤って 1 週間が追加されていました。これは、5.2.7 以降のバージョンで修正されています。

于 2013-08-07T05:51:16.850 に答える
0

これを試して、

echo date('Y-m-d', strtotime('second thursday of august 2013'));
于 2013-08-07T05:56:09.747 に答える
0

これを試してください。私はすでにチェックしており、あなたが望む結果を示しています。

$test = new DateTime('2013-08-00 10:00');
echo $test->modify('second thursday'.$test->format('H:i'))->format('Y-m-d H:i');
于 2013-08-07T05:58:39.623 に答える
0
$test = new DateTime('2013-08-02 10:00');
echo $test->modify('second thursday'.$test->format('H:i'))->format('Y-m-d H:i');

「第 2 木曜日」は、現在の日付から 2 番目の木曜日を意味します。したがって、期待される結果は2013-08-15です。特定の月の第 2 木曜日が必要な場合は、次のように指定できます。

$test = new DateTime('2013-08-02 10:00');
echo $test->modify('second thursday of this month '.$test->format('H:i'))->format('Y-m-d H:i');

「今月」は、コードが実行された日付ではなく、DateTime オブジェクトに現在格納されている日付を指すことに注意してください。

于 2013-08-07T06:12:49.483 に答える