php - Carbon - 为什么 addMonths() 改变月份的日期?

标签 php laravel date datetime php-carbon

这是一个简单的例子(今天是 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.

我是否遗漏了有关日期修改的内容?

最佳答案

它比那更残废 - 减法有同样的问题。不过,有一些特殊的方法可以避免溢出:

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

关于php - Carbon - 为什么 addMonths() 改变月份的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207798/

相关文章:

php - Laravel 附加枢轴数据没有错误

mysql - 结合SUB_DATE和TIMEDIFF在mysql中减去1小时

angularjs - Angular Date 过滤器在 Firefox 中不起作用

javascript - 如何从日期数组中删除重复的日期?

php - 能够使用 Laravel 在运行时更改数据库连接

php - 更新基于 Facebook 连接的站点的 cookie?

php - 使用谷歌地图、PHP 和 MySQL 从 A 点到 B 点的距离

php - Android和PHP登录认证

php - 在 laravel 5 中向 mysql 数据库插入数据时出错

php - 通过 Enter 提交(具体提交 提交名称)