よくある週間のカレンダーを作る
開いた時の曜日スタートで作れば楽なのに
常に曜日固定の週間カレンダーでなければならない時に困った。
Datetimeオブジェクトをインスタンスする
new DateTime();
これを使いましょう。
常に週の始まりにしたい
(new DateTime())->modify('monday this week');
うん、これでいいはず。
これでいい???
これでいいの???
ってなったのです。
だって週の始まりってやってるのにずれる時とずれない時があったんです。
phpでの週の始まりって曜日いつだ??
はい、考えました。
だって日曜から始まるカレンダーもあれば、月曜から始まってるカレンダーもありますね。
サーバーではうまくいくのにローカル環境ではうまくいかない。
ずれるなー、週の始まりがいけないのかーってなった時に調べました。
phpのバージョンによって違う!
大げさに言いましたが違う訳ではなく、5.6.23から変わってました。
5.6.23,7.0.8
週の始まりが常に月曜日となりました。 これより前のバージョンでは、日曜日も週の始まりとみなされていました。
PHP: サポートする日付と時刻の書式
なるほど、しっかりローカルのバージョン管理をしましょう。自業自得でした。。
とある先生にもらったdockerイメージをまんま使っていたのが原因ですね。。
dockerも勉強しないと。。。
modifyの連打が必要。
これもちょっと問題でした。
カレンダーのhtml構造上、横にループする形だったので
$date->modify('+1 day')->format('Y-m-d');
って土曜日まで回したら
$date->modify('-6day');
みたいに挟んでまた1日ずつずらしてって、なんか無駄だなー
modifyはするけど自身をずらして欲しくないなーなんて書いていたらやっぱりありました。
#DateTimeImmutable クラス
やっぱりあるのか。。
本当にphp知識がないですね。。
はじめに
このクラスの挙動は DateTime とほぼ同じですが、 自分自身は変更せずに新しいオブジェクトを返すという点だけが異なります。
PHP: DateTimeImmutable
本当ドキュメント見ればいいのにって思った。
ドキュメントが充実してるphpさん。
頑張りましょう。