実装の中で現在の時間に1時間を加算した日時を文字列で受け取る(時刻が12時なら'2019/08/09 13:00:00'といった具合)処理を作成していたのですが、以下のように実装したところ、想定していない値が返ってきました。
php
1// 2019/08/09 02:10に実行した場合、'2019/08/09 03:00:00'という値が返ってくることを期待している 2$date = date('Y/m/d ') . date('H') +1 . ':00:00'; 3 4var_dump($date); // 結果は string(10) "2020:00:00" となる 5 6// +1を加算しない場合、問題は発生しない 7$date = date('Y/m/d ') . date('H') . ':00:00'; 8var_dump($date); // 結果は string(19) "2019/08/09 03:00:00" となる 9 10// PHPの特性上、以下のように異なるデータ型で加算するよう記述してもintとして扱ってくれる 11$num = (string)'02' + (int)1; 12var_dump( $num ); // 結果は int(3) となる 13
公式のマニュアルを見てもvar_dumpを使った場合でも、date関数の返り値はstringであると記載されているので、date('H')の返り値に+1を加算しても何ら変わらないと思うのですが、内部的にdate型的な扱いをしているのでしょうか?
上記の処理に関しては社内業務用に適当に作ったものなので、『この処理だと24時に+1したら…なのでこの方が…』というアドバイスが欲しいのではなく、単純にこの挙動が気になったので、知っている方いましたら、解説いただけるとありがたいです。
よろしくお願いします。
追記
すみません。バージョンについて記載していませんでしたが、PHP 5.3.3です。
回答3件
あなたの回答
tips
プレビュー