電子書籍の厳選無料作品が豊富!

いつもお世話になります。
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

A 回答 (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++;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/25 09:15

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>";
}
?>
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/25 09:17

$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あるかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/24 11:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!