更新变量时,Laravel日期会发生变化

时间:2016-07-27 13:56:22

标签: php laravel laravel-5 php-carbon

我正在编写范围查询,并且我正在传递$("#date_range").change(function(){});以根据fetch_date时间戳从数据库表中提取内容。

我正在尝试查找一个月的所有记录,但只要我尝试以下操作,变量created_at就会不断变化:

$fetch_date

为什么 //$fetch_date is a carbon instance and is equal to the month the user selected //ie: Carbon {#221 ▼ // +"date": "2016-07-01 00:00:00.000000" //Create the next_month $next_month = $fetch_date->addMonth(); //Format next_month as a string $next_month = $next_month->format('Y-m-d'); //Format fetch_date as a string $fetch_date = $fetch_date->format('Y-m-d'); dd($fetch_date); //This now gives me 2016-08-01 - why? 会发生变化?我基本上试图将fetch_date保留为当前月份,将$fetch_date保持为下个月的开始。

我猜这有一个非常简单的原因,我只是在俯视。

2 个答案:

答案 0 :(得分:1)

因为调用addMonth方法会产生副作用。

如果你看看Carbon的source,你会发现所有addMonth正在做的是调用addMonths,其值为1,而这又是只需拨打DateTime::modify即可。它没有在文档中明确说明,但从示例中可以看出,调用该方法会修改存储的时间值:

  

示例#1 DateTime :: modify()示例

<?php
$date = new DateTime('2006-12-12');
$date->modify('+1 day');
echo $date->format('Y-m-d');
?>

为避免这种情况,请保留一份时间副本并修改:

$also_fetch_date = clone $fetch_date;
$next_month = $also_fetch_date->addMonth();
// ...

答案 1 :(得分:0)

似乎你要为fetch_date变量添加一个月。

试试这个:

$next_month = Carbon::createFromFormat('Y-m-d', $fetch_date->format('Y-m-d'));
$next_month->addMonth();

dd($next_month->format('Y-m-d'));

看一下Carbon的文档:http://carbon.nesbot.com/docs/ 也许会帮到你