- ベストアンサー
1ヶ月後の日付を出力したい
1ヶ月後の日付を出力したいのですが $tomorrow = mktime (0,0,0,date("m")+1,date("d"),date("Y")); phpマニュアルで上記のようなものを使って、 1970年1月1日からの通算秒を得ることが出来ましたが それとlocationtimeを使ってどうにか1ヶ月後の年月日を出せるようなのですが… やり方がどうしても分かりません。 いろいろ試したんですが、どつぼにハマって行くだけで…。 すみません、誰か助け舟を出して下さい お願いします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
LocationTimeという関数は知りませんがUNIXtimeまで取得できているんであれば後もう少しです。 UNIXtime形式から変換する関数は既に使われている関数であるdate()関数です。 マニュアル(参考URL)を良く読んでみてください。第2引数が省略可能であり、省略した場合は現在時刻が使用される、とありますがここにUNIXtimeを引数として与えるとUNIXTimeの時間を第一引数にしたがってフォーマットします。 つまり上で取得された$tomorrowを第2引数に与えてやれば良いのです。 $tomorrow = mktime (0,0,0,date("m")+1,date("d"),date("Y")); を実行後 $next_month = date("Y-m-d", $tomorrow); としてやれば$next_monthに"yyyy-m-dd"の書式で来月の日付が取得できる「かもしれません」 ここからが重要です。なぜ「かもしれない」のでしょうか? 重要なのは「一月後の日付」という言葉の定義です。 「次の月」というのは12月を除いて現在の月に1を足した月になります。 ですが「一月後」というのは次の月と同義ではありません。 考えてみてください。たとえば今日がx年1月30日だったとしましょう。 一月後の日というのはいつでしょう?月に1を足した日? やってみましょう。X年2月30日・・・さてカレンダーを見てみましょう。どの年のカレンダーを見ても2月の30日という日は存在しませんよね? 要するにこういうことが起こってしまうわけです。 実際には2月30日をmktime関数に与えてやれば融通を利かせてくれるため閏年では3月1日、そうでなければ3月2日になると思います(実際に試してません。環境が手元に無いので・・・申し訳ない) これは別に1月に限った話ではなくだいたいの奇数月では31日まであるため31日に実行されると次の月は30日までなため2月後の1日が「一月後の日付」として帰ってくる事になります。 要するに「一月後の日付」、という言葉の定義を厳密に定義してあげなければどこかで感覚的におかしい結果が返る事になります。というわけでまずは「一月後の日付」というものを明確に定義する事が必要でしょう。
その他の回答 (1)
- ToKey
- ベストアンサー率46% (12/26)
目的がわからないので適しているかどうかわかりませんが、 3.0.12以降のPHPで利用できる関数に strtotime というのがあります。 % cat strtotime.php #!/usr/bin/php -q <? echo date("Y-m-d", strtotime("+1 month"))."\n"; ?> % php strtotime.php 2001-12-10 こんな強力な関数が何の準備もせずに利用できるのには驚きですね。 来週の木曜日とかも可読性を保ったままで記述できるんですよね。
お礼
たったこれだけでも取得できるんですね。 なにやら頭の中がこんがらがっていたのにすっきりしてしまいました。 この方法は使えますね。。。 もし今回使わなくてもいずれ絶対に使う日がきます。 本当に助かりました♪ ありがとうございました。 あと、自宅PCが壊れているために返事が遅れたことをお二方に お詫び申し上げます。 またなにかありましたら宜しくお願いします!
お礼
長文を書いて頂き本当にありがとうございました!! ちゃんと隅から隅まで読ませてもらいました。 まずはじめにお詫びを… Unixからの時間取得はlacationtimeではなくlacaltimeの間違いでした。 date関数でunixスタンプタイムをY-M-Dに変換できるんですね。 知りませんでした…f(^_^;) >実際には2月30日をmktime関数に与えてやれば融通を利かせてくれるため閏年では3月1日、そうでなければ3月2日になると思います はい、ご推測の通りの日付が返ってきました。 月の定義はすでに決まっているので、それを本文の方にしっかり書くべきでしたね 反省。。。 これでようやく前進できそうです。 ありがとうございました。