Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

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

sooyama
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした