PHP の DateTime 関数に問題があります。今日は12月3日月曜日。
次のコードを想定します。
$dte = new DateTime(date('Y-m-d H:i:s'));
var_dump($dte->format('Y-W'));
$dte->modify('+4 weeks');
var_dump($dte->format('Y-m-d H:i:s -- Y_W'));
$dte->modify('+1 days');
var_dump($dte->format('Y-m-d H:i:s -- Y_W'));
4 週間後、12 月 31 日になります。年の最後の週(52?)を取得すると思われます。しかし、次の出力でわかるように、2012 年の第 1 週が表示されます。
string '2012-49' (length=7)
string '2012-12-31 14:48:00 -- 2012_01' (length=30)
string '2013-01-01 14:48:00 -- 2013_01' (length=30)
だから私の問題は、最初の変更の後、私は得るべきだと思うということです:
2012-12-31 14:48:00 -- 2012_52
しかし、代わりに私は得る
2012-12-31 14:48:00 -- 2012_01
では、なぜ年をインクリメントせずに週が 01 に戻るのでしょうか?なぜ他の行で 2013_01 が返されるのでしょうか?
編集:: 前の週が 52 週であることがわかりました。閏年とは関係ありますか? しかし、繰り返しになりますが、年をインクリメントせずに週を 01 に戻すにはどうすればよいでしょうか?