変数で指定された日に対して、+3ヶ月、+6ヶ月、+12ヶ月を計算する方法

このQ&Aのポイント
  • 変数で指定された日に対して、+3ヶ月、+6ヶ月、+12ヶ月を計算する方法について知りたいです。当日からの計算方法はわかるのですが、変数で指定された日に対して計算する方法を教えてください。
  • strtotime関数を使用して、変数で指定された日に対して+3ヶ月、+6ヶ月、+12ヶ月を計算する方法がわかりません。違う方法でも構いませんので、教えていただければ幸いです。
  • 変数で指定された日に対して、+3ヶ月、+6ヶ月、+12ヶ月を計算する方法が知りたいです。当日からの計算方法はわかるのですが、指定された日に対して計算する方法を教えてください。
回答を見る
  • ベストアンサー

変数で来た指定日に対して、+3ヶ月、+6ヶ月、+12ヶ月を計算する方法

変数で来た指定日に対して、+3ヶ月、+6ヶ月、+12ヶ月を計算する方法が知りたいです。 こんな感じで、当日に対して+する事は知っているのですが echo "1週間後 = " . date("Y/m/d",strtotime("+1 week")); echo "1ヶ月後 = " . date("Y/m/d",strtotime("+1 month")); echo "1年後  = " . date("Y/m/d",strtotime("+1 year")); 当日ではなく、変数できた指定の年月日に対して足す方法が解らなくて困っています。 $data03 = "2010-10-01"; //$data04 = strtotime("+3 month",$data03); $data04 = strtotime($data03,"+3 month"); //$data04 = $data03 + strtotime("+3 month"); echo '3ヶ月後:'.$data04.'<br />'; 結果 3ヶ月後:1285858800 strtotime関数のマニュアルは見ましたが良くわかりません… まったく違う方法でも良いのでお願いします。 いろいろ検索しましたが、当日からの計算方法しか見付かりませんでした。 宜しくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

第二引数は、タイムスタンプを与える必要があるので、 <?php $data03 = "2010-10-01"; //なのであれば、まずタイムスタンプに変換してから $data03_ts = strtotime($data03); //そのタイムスタンプを渡す。 $result = strtotime("+3 month", $data03_ts); ?> とする必要があるのではないでしょうか。

kzkz-16
質問者

お礼

ご回答ありがとうございます。 タイムスタンプをよく理解していませんでした。 教えて頂いたサンプルを実行したところ、意味不明な数字が表示されて それがタイムスタンプなんだと気付くのに時間がかかりましたw hogehoge78様の回答からタイムスタンプの概念を基本から学び直した事で 解決致しました! 先に思い付いたのは、もう一人の方の回答お礼欄に記載した strtotime関数を使わずmktime関数を使った強引なやり方なのですが その後、hogehoge78様のやり方でもタイムスタンプから1秒引いて書式化すれば良いと気付き 実行してみたところ、こちらも期待値が返ってきました! ありがとうございました! ソースコードを残しておきます。 <?php //2010年12月1日のデータが来た $data03 = "2010-12-01"; //タイムスタンプに変換 $data03_ts = strtotime($data03); //タイムスタンプを渡して +3ヶ月 $result = strtotime("+3 month", $data03_ts); //前月末日を取る為、タイムスタンプから1秒引く $result02 = $result - 1; //タイムスタンプを目的の書式に変換 $result03 = date("Y-m-d", $result02); //期待通り2011-02-28が表示された! echo $result03; ?>

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>+3ヶ月、+6ヶ月、+12ヶ月を計算する方法 ○○ヶ月後などというあいまいな定義は仕様的にNGです。 月末処理をどうするかによってやり方は全然違います。 月末処理はどうするつもりですか? うるう年の処理はどうするつもりですか? たとえば11月30日の3か月後は、2月28日? 30日換算で3月2日?うるう年のときは1日になるの? この手の時間計算をするときに一番ひっかかるところです まずは仕様を明確にしてから手段を考えてください。

kzkz-16
質問者

お礼

ご回答ありがとうございます。 やや強引なやり方に感じますが 自己解決しましたので、同じ問題にぶつかられた方の為に ソースコードを残しておきます。 strtotime関数は使いませんでした(^^;; <?php //2010年12月1日のデータが来た $data03 = "2010-12-01"; //ハイフンでスプリット (区切り文字にハイフンを使っている場合) $data04 = explode("-", $data03); //$data04[1]に月の数字が入るのでそれに目的月数を足す $data05 = $data04[1] + 3 ; //12に3足されて15になっちゃうけど大丈夫!mktimeが補正してくれる! //mktimeを使って指定日のタイムスタンプを取得&補正する //前月末日を取りたいので日の指定をわざと0とする&年の指定は無し $data06 = mktime(0, 0, 0, $data05, 0); //時,分,秒,月,日,年の書式で取得したい日を指定する //タイムスタンプを目的の書式に変換 $data07 = date("Y-m-d", $data06); //期待通り2011-02-28が表示された! echo $data07; ?>

関連するQ&A

  • PHPで指定した日付の1ケ月前表示

    MySQLにある日付を拾ってきて表示しています。 <?php echo $row_target_date['ap_date']; ?> 上記のPHPでは、MySQLのテープルのap_dateカラムにある日付を拾ってきて表示するようにしています。 この1ケ月前を表示したいと考えています。 <?php echo "1月前:" . date("Y/m/d",strtotime("-1 month" ,strtotime("echo $row_target_date['ap_date']"))) . "<BR>"; ?> では表示できませんでした。 表示方法についてご指導いただきたくお願い致します。

    • ベストアンサー
    • PHP
  • 指定の日付の何時間後

    DBから持ってきた日付(例:2008/06/23 5:30)の6時間後を作り変数に格納したいのですがよいやり方はありませんか。 strtotime()関数を使ってみてもうまくいきません。 $rokujikango = date("y/m/d G:i",strtotime('+6 hour',$timeFrimDb)); としてもうまくいかないので困っています。

    • ベストアンサー
    • PHP
  • strtotimeについて

    指定された月の翌月を返したく以下のようにしました。 // 200909の場合翌月の200910を返す。これは問題ありません echo date('Ym', strtotime('+1 month')); // 問題は以下から // 指定の月をセット $str = '200910; // どちらの場合も200910を返す echo date($str, strtotime('+1 month')); echo date($str, strtotime('-1 month')); このような方法で$strが200911であれば200912を返し200912であれば201001を返したのですが どのようにすれば可能でしょうか?

    • 締切済み
    • PHP
  • 設定日から指定日数後の日付の取得

    全く初心者の質問ですみません。 設定日から指定日数後の日付を取得したいと思っています。 echo $date // 正しい設定日がY-m-dで表示されます date ("Y-m-d", mktime (0,0,0,date('m',$date),date('d',$date) + $add_date,date('Y',$date))); で取得できると思ったのですが、常に1970-01-01が返されます。 先ほどecho $dateで設定した日付が表示されるにもかかわらず、 print_r(getdate($add_date)); とすると [seconds] => 31 [minutes] => 33 [hours] => 9 [mday] => 1 [wday] => 4 [mon] => 1 [year] => 1970 [yday] => 0 [weekday] => Thursday [month] => January [0] => 2011 と1970-01-01が返されます。 何故でしょうか?

    • ベストアンサー
    • PHP
  • 一ヶ月前の月を表示させたい!

    いつもお世話になっています。 今回date関数で引っ張ってきた「m」(month)を、 一ヶ月前の表示にさせたくて困っています。 ソースはこんな感じです。 --ここはちゃんと出ます。 $today = date("Y-m-d"); --print結果  2007-12-07←この形で、一ヶ月前に表示させたい。 --これでいけると思ったんですが、、、 $before = strftime("%F", strtotime("-1month")); --print結果   何も出ない。strftime関数はphp5.2.4は対応していないんでしょうか(?。?);4.4.6ではこれで通ります。 --苦肉の策でこんなのも作ってみましたが、 $current_year = date("Y"); $current_month = date("n"); $current_day = date("d");      $hiki = ($current_month-1);      $before = date("Y-$hiki-d"); --print結果   2007-11-07(しかし、これはただ12と言う数字から-1しただけなので、来年の1月になると、2008-0-1)となってしまいます。これは是非回避したい。 質問まとめ php5.2.4で通る 例 $today = date("Y-m-d"); の一ヶ月前の表示方法を、知りたい。 大変恐縮ですが、 どなたか、知識をお持ちの方、是非ご指導ください。

    • ベストアンサー
    • PHP
  • PHPで現在日から3日以内と7やると strtot

    PHPで現在日から3日以内と7やると strtotime(date('Y/m/d 00:00:00') . '-3day'); でできますか?

    • ベストアンサー
    • PHP
  • strtotime 前月・前々月の表示

    お世話になります。 strtotime を使って下記のように前月・前々月の表示をさせています ーーーーーーーーーーーーーーーー <?php for($i = -2 ; $i <= 0 ; $i++){ $year = date("Y",strtotime("$i month")); $month = date("m",strtotime("$i month")); print $year . "年" . $month . "月<br>"; } ?> ーーーーーーーーーーーーーーーー 7月31日にその表示をさせたら 2007年05月 2007年07月 2007年07月 と表示されてしまいました。 今月(8月)に入ってからは こちらの意図するとおりの表示に戻っていました 何か strtotime の使い方等間違っているのでしょうか? ご指導、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 日付の比較について

    最近PHPの勉強を始めた初心者です。 はじめて質問させていただきます。 2005-1-1から2020-12-31の間で入力した日付の曜日を表示するプログラムを作成しています。 2005-1-1から2020-12-31の間以外ならエラー表示するようにしたいのですが、 入力した日付との比較がうまくいかず、思うように動きません。 どのように直せばいいのかを教えていただけないでしょうか?よろしくお願いします。 <?php $year=$_POST["year"]; $month=$_POST["month"]; $day=$_POST["day"]; $date_str="$year-$month-$day"; $date_time=strtotime($date_str); $firstdate_str="2005-1-1"; $firstdate_time=strtotime($firstdate_str); $lastdate_str="2020-12-31"; $lastdate_time=strtotime($lastdate_str); if ($date_time < $firstdate_time || $date_time> $lastdate_time)  {  echo "Please enter a date between 1/1/2005 and 12/31/2020.";  } else  {  $finddate=date('l', mktime(0,0,0,$month, $day, $year));  echo "The day entered in on $finddate";  } ?>

    • 締切済み
    • PHP
  • セレクトボックスの連動処理

    お世話になります。 JavaScript勉強中のもので、サンプルソースを見つけることができなかったので、質問させてください。 http://javascriptmarket.com/script/jsm07.html http://www.alink.co.jp/tech/blog/sample_code/js/team_json_20090404.html やりたいイメージとしては、上記のページのようなことです。 具体的には、日付の入るセレクトボックスを2つ用意し、 片方のセレクトボックスの日付を選択すると、もう片方のセレクトボックスに●日後の日付選択肢が表示される。 ということをしたいと思っています。 元々の日付の選択肢が静的であれば上記URLを参考にすれば作れる自信があるのですが、動的なものであまり自信がありません。。。 以下実際に作ったコードです。 (PHPで2つ目のセレクトボックスには3日後の日付が表示されるようにしています。) ---------------------------------------------------------- //日付 for($a = 0; $a < 14; $a++) { $timestamp[] = strtotime("+$a day"); } $day_set = array( "0"=>"▲日付を選んで下さい", "1"=>date( 'Y/m/d', $timestamp[0] ) , "2"=>date( 'Y/m/d', $timestamp[1] ) , "3"=>date( 'Y/m/d', $timestamp[2] ) , "4"=>date( 'Y/m/d', $timestamp[3] ) , "5"=>date( 'Y/m/d', $timestamp[4] ) , "6"=>date( 'Y/m/d', $timestamp[5] ) , "7"=>date( 'Y/m/d', $timestamp[6] ) , "8"=>date( 'Y/m/d', $timestamp[7] ) , "9"=>date( 'Y/m/d', $timestamp[8] ) , "10"=>date( 'Y/m/d', $timestamp[9] ) , "11"=>date( 'Y/m/d', $timestamp[10] ) , "12"=>date( 'Y/m/d', $timestamp[11] ) , "13"=>date( 'Y/m/d', $timestamp[12] ) , "14"=>date( 'Y/m/d', $timestamp[13] ) ); //お渡し日付セット for($a = 3; $a < 17; $a++) { $timestamp2[] = strtotime("+$a day"); } $day2_set = array( "0"=>"▲日付を選んで下さい", "1"=>date( 'Y/m/d', $timestamp2[0] ) , "2"=>date( 'Y/m/d', $timestamp2[1] ) , "3"=>date( 'Y/m/d', $timestamp2[2] ) , "4"=>date( 'Y/m/d', $timestamp2[3] ) , "5"=>date( 'Y/m/d', $timestamp2[4] ) , "6"=>date( 'Y/m/d', $timestamp2[5] ) , "7"=>date( 'Y/m/d', $timestamp2[6] ) , "8"=>date( 'Y/m/d', $timestamp2[7] ) , "9"=>date( 'Y/m/d', $timestamp2[8] ) , "10"=>date( 'Y/m/d', $timestamp2[9] ) , "11"=>date( 'Y/m/d', $timestamp2[10] ) , "12"=>date( 'Y/m/d', $timestamp2[11] ) , "13"=>date( 'Y/m/d', $timestamp2[12] ) , "14"=>date( 'Y/m/d', $timestamp2[13] ) ); <select name="day" style="margin-right: 50px"> <?php foreach ($day_set as $key => $value): ?> <option value="<?php echo $value; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select> <select name="day2" style="margin-right: 50px"> <?php foreach ($day2_set as $key => $value): ?> <option value="<?php echo $value; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select>

  • PHPでn日後を計算したい

    今日から7日後は◯月◯日◯曜日という計算をしたいのですが、 土日祝日を除く方法で詰まっています。 <?=date("Y-m-d",strtotime("+7 day"));?> 仕上がり日は◯日、といった表示をしたいので、 土日祝日を除く営業日をカウントしたいのです。 難しいでしょうか?? 汗 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP

専門家に質問してみよう