- ベストアンサー
日付データを比較して出力したい!
いつもお世話になります。 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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>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++; }
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
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>"; } ?>
お礼
yambejpさま、迅速なご回答ありがとうございます。 返事が遅れて申し訳ございません。 日付関数の使い方も勉強になりました。 本当にありがとうございましたm(_ _)m
- wp_
- ベストアンサー率54% (132/242)
$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あるかもしれません。
お礼
wp_さま、迅速なご回答まことにありがとうございます^^ 早速、解析して試してみます! 本当にありがとうございますm(_ _)m
お礼
moon_nightさま、迅速なご回答ありがとうございます。 返事が遅れて申し訳ございません。 みなさまのお力のおかげで無事に取得することができました! まだまだ勉強しなければならないことは多いですが、楽しいです。 本当にありがとうございましたm(_ _)m