我正在使用一个函数,我发现here可以将日期添加到某个日期,因为有些月份的日期比其他月份少。
function addMonths($date_str, $months){
$date = new DateTime($date_str);
$start_day = $date->format('j');
var_dump($date->format('Y-m-d'));
$date->modify("+{$months} month");
$end_day = $date->format('j');
var_dump($date->format('Y-m-d'));
if ($start_day != $end_day)
$date->modify('last day of last month');
var_dump($date->format('Y-m-d'));die();
return $date->format('Y-m-d');
}
由于函数没有按预期工作,我转储了一些变量来查看发生了什么。让我们尝试以下方法:
addMonths('2012-05-31',1)
我得到以下错误输出:
string(10) "2012-05-31" string(10) "2012-07-01" string(10) "2012-05-31"
正如您所看到的,当我在输入日期添加一个月时,我得到“2012-07-01”但是条件得到满足,我应该得到6月的最后一天,也就是7月的前一个月,而不是5月。我不知道发生了什么事,你能帮助我吗?
答案 0 :(得分:2)
PHP有一个bug with DateTime relative formats,直到PHP 5.2.17
请改为尝试:
<?php
function addMonths($date_str, $months) {
$date = new DateTime($date_str);
$start_day = $date->format('j');
$date->modify("+{$months} month");
$end_day = $date->format('j');
if ($start_day != $end_day) {
$date->modify('last day');
}
return $date->format('Y-m-d');
}
echo addMonths('2012-05-31', 1);
我这里没有这么旧版本的PHP,但我认为它可以在这个版本中处理last day
。
对我而言,它会返回:
2012-06-30
答案 1 :(得分:0)
我复制/粘贴了你的代码,以下是我在PHP 5.3.3上的输出:
string(10) "2012-05-31"
string(10) "2012-07-01"
string(10) "2012-06-30"
答案 2 :(得分:0)
function add_month($format , $date , $months_to_add ){
return date($format, strtotime("$date +$months_to_add month"));
}
我正在使用它。你可以尝试这个。