这是一个简单的例子(今天是2016-08-29):
var_dump(Carbon::now());
var_dump(Carbon::now()->addMonths(6));
输出:
object(Carbon\Carbon)#303 (3) {
["date"] => string(26) "2016-08-29 15:37:11.000000"
}
object(Carbon\Carbon)#303 (3) {
["date"] => string(26) "2017-03-01 15:37:11.000000"
}
对于Carbon::now()->addMonths(6)
我期待2017-02-29
,而不是2017-03-01
。
我是否遗漏了有关日期修改的内容?
答案 0 :(得分:11)
它比那更残缺 - 减法有同样的问题。但是有一些特殊方法可以避免溢出:
function original(){
return new Carbon('2016-08-31');
};
function print_dt($name, $date){
echo $name . $date->toAtomString() . PHP_EOL;
};
print_dt('original: ', original());
echo '-----' . PHP_EOL;
print_dt('addMonths: ', original()->addMonths(6));
print_dt('addMonthsNoOverflow: ', original()->addMonthsNoOverflow(6));
echo '-----' . PHP_EOL;
print_dt('subMonths: ', original()->subMonths(2));
print_dt('subMonthsNoOverflow: ', original()->subMonthsNoOverflow(2));
输出:
original: 2016-08-31T00:00:00+00:00
-----
addMonths: 2017-03-03T00:00:00+00:00
addMonthsNoOverflow: 2017-02-28T00:00:00+00:00
-----
subMonths: 2016-07-01T00:00:00+00:00
subMonthsNoOverflow: 2016-06-30T00:00:00+00:00
答案 1 :(得分:9)
没有2/29/2017。闰年发生在2016年。
以下链接:
http://carbon.nesbot.com/docs/#api-addsub
提供了将1个月添加到2012年1月31日并于2012年3月3日到达的示例。这是有意的,虽然看起来让我感到困惑。
作为展示不同行为的反例,在SQL中:
SELECT dateadd(m,1,'2012-01-31')
结果是2012年2月29日,因此最好检查您计划使用的任何addmonth()函数的规范。