2017-04-17 154 views
1

我操纵我的日期使用我的Laravel应用程序中的PHP Carbon包。碳返回错误的日期错误

$start_date = Carbon::tomorrow('Europe/London'); 
$end_date = $start_date->addDays($tier->duration_days); 
Log::debug('Carbon::now(): '.Carbon::now()); 
Log::debug('Carbon::tomorrow(Europe/London): '.Carbon::tomorrow('Europe/London')); 
Log::debug('$start_date: '.$start_date); 
Log::debug('$end_date: '.$end_date); 

上面的代码将打印出以下调试行:

我试图生成日期(x天在未来)

请看看这个代码时有一些怪异的结果

2017-04-17 21:46:31] local.DEBUG:Carbon :: now():2017-04-17 21:46:31
[2017-04-17 21:46:31 ] local.DEBUG:碳::明天(欧洲/伦敦): 2017-04-18 00:00:00 [2017-04-17 21:46:31] local.DEBUG:$ start_date: 2017年5月16日00:00:00 [2017年4月17日21点46分31秒] local.DEBUG:$ END_DATE: 2017年5月16日00:00:00

采用碳: :明天()将打印出正确的日期,但使用技术上使用相同函数的$ start_time会返回错误的日期。 有人可以建议什么可能会出错吗?

仅供参考我在我的config/app.php文件中将欧洲/伦敦设置为我的时区。

+1

'addDays()'修改碳对象.... [碳addDays(),但没有modyfing现有实例(https://laracasts.com/discuss/channels/laravel/carbon-adddays-but -without-modyfing-existing-instance)'$ end_date = $ start_date-> copy() - > addDays($ tier-> duration_days);' –

回答

3

$date->addDays实际上并没有在添加日期时返回一个实例,它在修改日期之后返回相同的实例(这会产生很大的差异)。

因此,您应该先将日期复制到新实例中,然后添加日期。

$start_date->copy()->addDays($tier->duration_days);