使用strtotime()
添加一个月时,在我输入日期“2017-01-30”的情况下,它会给我错误的输出
function date_diff($min,$max)
{
$d1 = strtotime($min);
$d2 = strtotime($max);
$min_date = min($d1, $d2);
$max_date = max($d1, $d2);
$count=$i = 0;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date)
{
echo "<br/>";
echo date('Y-m-d',$min_date)."--------".date("Y-m-d",$max_date);
}
}
我用这样的日期调用函数:
date_diff("2016/12/30","2017/07/30");
以上功能的输出是:
2017-01-30--------2017-07-30
2017-03-02--------2017-07-30 // wrong calculation on this line
2017-04-02--------2017-07-30
2017-05-02--------2017-07-30
2017-06-02--------2017-07-30
2017-07-02--------2017-07-30
预期输出
2017-01-31--------2017-07-30
2017-02-28--------2017-07-30
2017-03-31--------2017-07-30
2017-04-30--------2017-07-30
2017-05-31--------2017-07-30
2017-06-30--------2017-07-30
答案 0 :(得分:1)
找出月份差异,然后使用mktime
$min="2016/12/30";
$max="2017/07/30";
$ts1 = strtotime($max);
$ts2 = strtotime($min);
$year1 = date('Y', $ts1);
$year2 = date('Y', $ts2);
$month1 = date('m', $ts1);
$month2 = date('m', $ts2);
$diff = (($year1 - $year2) * 12) + ($month1 - $month2);
for ($i = 1; $i < $diff; $i++)
{
$last_day=date('m-t-Y', strtotime(date('Y-m-d', mktime(0, 0, 0, $i, 1, $year1))));
echo $last_day."--------".date('Y-m-d',$ts1);
echo "<br>";
}
输出
01-31-2017--------2017-07-30
02-28-2017--------2017-07-30
03-31-2017--------2017-07-30
04-30-2017--------2017-07-30
05-31-2017--------2017-07-30
06-30-2017--------2017-07-30
答案 1 :(得分:1)
我可能(甚至可能)误解了你的问题,但这是我提供答案的答案。
代码:
function date_func($d1,$d2){
$min=date("Y-m-t",strtotime(min([$d1,$d2]))); // always the last day of the month
$max=date("Y-m-d",strtotime(max([$d1,$d2])));
$month_count=0;
while(($min=date("Y-m-t",strtotime("$min +1 day")))<$max){
++$month_count;
echo "$min--------$max\n";
}
echo "Month Count: $month_count\n"; // I assume you only want the count at the end
}
date_func("2016/12/30","2017/07/30"); // I had to rename your function to avoid an error
输出:
2017-01-31--------2017-07-30
2017-02-28--------2017-07-30
2017-03-31--------2017-07-30
2017-04-30--------2017-07-30
2017-05-31--------2017-07-30
2017-06-30--------2017-07-30
Month Count: 6