2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

phpで動的な週カレンダーを作りたい

Posted at

よくある週間のカレンダーを作る

開いた時の曜日スタートで作れば楽なのに
常に曜日固定の週間カレンダーでなければならない時に困った。

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さん。
頑張りましょう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?