いつもお世話になっております。
標題について、下記のコードをechoで出力すると本来
2018-08-14
2018-07-14
2018-09-14
と出力してほしいところ、
2018-08-14
2018-07-14
2018-08-14
と$next_dateが一カ月早く出力されてしまいます。
これについて原因がわからないのですが、ご教示いただけないでしょうか。
php
1$today = new DateTime(); 2$date = $today->format('Y-m-d'); 3$prev_date = $today->modify('-1 month')->format('Y-m-d'); 4$next_date = $today->modify('+1 month')->format('Y-m-d');
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
php
1<?php 2 3$today = new DateTime(); 4$date = $today->format('Y-m-d'); 5var_dump($today); 6$prev_date = $today->modify('-1 month')->format('Y-m-d'); 7var_dump($today); 8$next_date = $today->modify('+1 month')->format('Y-m-d'); 9var_dump($today);
object(DateTime)#1 (3) {
["date"]=> string(26) "2018-08-14 11:53:28.002441"
["timezone_type"]=> int(3)
["timezone"]=> string(16) "Europe/Amsterdam"
}
object(DateTime)#1 (3) {
["date"]=> string(26) "2018-07-14 11:53:28.002441"
["timezone_type"]=> int(3)
["timezone"]=> string(16) "Europe/Amsterdam"
}
object(DateTime)#1 (3) {
["date"]=> string(26) "2018-08-14 11:53:28.002441"
["timezone_type"]=> int(3)
["timezone"]=> string(16) "Europe/Amsterdam"
}
$today
の中身は、modify()メソッドを呼ぶたびに書き換わってる。
php
1<?php 2 3$date = (new DateTime())->format('Y-m-d'); 4var_dump($date); 5$prev_date = (new DateTime())->modify('-1 month')->format('Y-m-d'); 6var_dump($prev_date); 7$next_date = (new DateTime())->modify('+1 month')->format('Y-m-d'); 8var_dump($next_date);
string(10) "2018-08-14"
string(10) "2018-07-14"
string(10) "2018-09-14"
とする。
あるいは、オブジェクトのクローン作成でもいいけど、コードが無駄に長くなるから
こっちはナシかな、動くけど。
php
1<?php 2 3$now = new DateTime(); 4$today = clone $now; 5$date = $today->format('Y-m-d'); 6var_dump($date); 7 8$today = clone $now; 9$prev_date = $today->modify('-1 month')->format('Y-m-d'); 10var_dump($prev_date); 11 12$today = clone $now; 13$next_date = $today->modify('+1 month')->format('Y-m-d'); 14var_dump($next_date);
投稿2018/08/14 10:06
退会済みユーザー
総合スコア0
0
ベストアンサー
php
1$today = new DateTime(); 2$date = $today->format('Y-m-d'); 3$prev_date = $today->modify('-1 month')->format('Y-m-d'); 4 5var_dump($today); // ここで、$today の値を確認しよう 6 7$next_date = $today->modify('+1 month')->format('Y-m-d'); 8 9var_dump($today); // ここで、$today の値を確認しよう
このコードを実行してみれば理解できると思います。
自分ならこう書くでしょう。
php
1$today = (new DateTime())->format('Y-m-d'); 2$prev_date = (new DateTime())->modify('-1 month')->format('Y-m-d'); 3$next_date = (new DateTime())->modify('+1 month')->format('Y-m-d');
投稿2018/08/14 08:56
編集2018/08/14 09:17退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/14 09:00
退会済みユーザー
2018/08/14 09:00
2018/08/14 09:02
退会済みユーザー
2018/08/14 09:06
2018/08/14 09:13
退会済みユーザー
2018/08/14 09:15
2018/08/14 09:18
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。