• ベストアンサー

日付データを比較して出力したい!

いつもお世話になります。 2つの日付を比較して、月の差を求めて、 for文でその月差分を1つめの変数に出力したいのですが、 うまくいきません。XAMPP環境です。 自分でも調べてみますが、お願いします。 ------------------------------ <?php //2007年9月と2007年12月を比較 $date1="2007-09"; $date2="2007-12"; //差分を求める list($year1,$month1) = split('[/.-]', $date1); list($year2,$month2) = split('[/.-]', $date2); $year=$year2-$year1; $month=$month2+1-$month1; $total_month=$year*12+$month; //for文で出力 for($k=0;$k<$total_month;$k++){ echo $k."回目のループ。<BR>"; echo $k+$date1; } ?> ----------------------------------- --------実行結果-------- 0回目のループ。 2008 1回目のループ。 2009 2回目のループ。 2010 3回目のループ。 2011 ------------------------ となってしまいます。求めたい処理は --------理想結果-------- 0回目のループ。 2007/09 1回目のループ。 2007/10 2回目のループ。 2007/11 3回目のループ。 2007/12 ------------------------ です。よろしくお願いしますm(_ _)M

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

>for文でその月差分を1つめの変数に出力したい この文章は意味不明ですが、入力データと結果だけ満たしてみました。 ポイントは mktime(0,0,0,12+1,1,2007) としても 2008/01/01 を取るということかな。 $data1と$data2を逆にすると暴走するのでそのような可能性がある場合は注意。 $date1="2007-09"; $date2="2007-12"; //差分を求める list($year1,$month1) = split('[/.-]', $date1); $i=0; while(1){ $t = mktime(0,0,0,$month1+$i,1,$year1); echo $i."回目のループ。<br>\n"; echo date("Y/m",$t) ."<br>\n"; if (date("Y-m",$t) == $date2) { break; } if ($i > 20) { break; } # 暴走した場合の安全スイッチ $i++; }

yoroshikumail
質問者

お礼

moon_nightさま、迅速なご回答ありがとうございます。 返事が遅れて申し訳ございません。 みなさまのお力のおかげで無事に取得することができました! まだまだ勉強しなければならないことは多いですが、楽しいです。 本当にありがとうございましたm(_ _)m

その他の回答 (2)

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

forでまわすならこんな感じ? <?PHP $date1="2007-09"; $date2="2007-12"; $d_date1=strtotime($date1."-01"); $d_date2=strtotime($date2."-01"); $month1= date("Y",$d_date1) * 12 + date("m",$d_date1); $month2= date("Y",$d_date2) * 12 + date("m",$d_date2); for($i=0;$i<=$month2-$month1;$i++){ echo "{$i}回目のループ。<BR>"; echo date("Y/m",mktime(0,0,0,date("m",$d_date1)+$i,date("d",$d_date1),date("Y",$d_date1)))."<br>"; } ?>

yoroshikumail
質問者

お礼

yambejpさま、迅速なご回答ありがとうございます。 返事が遅れて申し訳ございません。 日付関数の使い方も勉強になりました。 本当にありがとうございましたm(_ _)m

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

$year_1 = 2007; $month_1 = 9; $year_2 = 2007; $month_2 = 12; $ret = array(); $ii = 0; $limit = 100; $flag = true; do{  $m1=mktime(0,0,0,$month_1+$ii ,1,$year_1);  $m2=mktime(0,0,0,$month_2,1,$year_2);  $flag = $m2 - $m1 > 0;  list($year,$month) = explode(',',date('Y,m',$m1));  $ret[] = $year . "/" . $month;  $ii++; } while($flag and $limit > $ii); こんな感じですかねぇ 細かい精査はして無いのでbugあるかもしれません。

yoroshikumail
質問者

お礼

wp_さま、迅速なご回答まことにありがとうございます^^ 早速、解析して試してみます! 本当にありがとうございますm(_ _)m

関連するQ&A