用碳增加日期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用碳增加日期相关的知识,希望对你有一定的参考价值。

我正在尝试为Laravel 4中的预订系统创建一系列的中断日期。我的数据库中有一个测试行,其start_date为2016-01-24,end_date为2016-01-29。

这是使用Carbon来增加行并循环使用Carbon增加一天并将其添加到数组的代码:

$reserved = Reservation::where('property_id', $property->id)->get();

$blackoutDays = [];

foreach($reserved as $r)
{
    $start = new CarbonCarbon($r->start_date);
    $end = new CarbonCarbon($r->end_date);
    $days = $start->diff($end)->days;

    for($i = 0; $i <= $days; $i++)
    {
        $date = '';
        $date = $start->addDays($i);

        $blackoutDays[] = $date->format('Y-m-j');
    }
}

我想在$ blackoutDays中获得的是:

["2016-01-24", "2016-01-25", "2016-01-26", "2016-01-27", "2016-01-28", "2016-01-29"]

但我实际得到的是:

["2016-01-24", "2016-01-25", "2016-01-27", "2016-01-30", "2016-02-3", "2016-02-8"]

有谁知道为什么会发生这种情况/如何解决?有没有更好的方法呢?

答案

你每次运行你的for循环都会增加$i。因此,它在第一次运行中增加1,在第二次运行中增加2天,在第三次运行中增加3天,依此类推。

因此,您想要替换

$date = $start->addDays($i);

$date = $start->addDays(1);

你可能陷入困境的地方是在每次调用时从$start日期对象添加日期的想法,但事实并非如此,因为这个对象不是“Immutable”。

另一答案

为了获得更清晰的结果,您可以使用addDay()方法:

$date = $start->addDay();

但实际上这是完全一样的。 addDay()方法的源代码:

/**
 * Add a day to the instance
 *
 * @param int $value
 *
 * @return static
 */
public function addDay($value = 1)
{
    return $this->addDays($value);
}

以上是关于用碳增加日期的主要内容,如果未能解决你的问题,请参考以下文章

JS代码片段:一个日期离现在多久了

sql 日期转换代码片段 - Dato,120,konvertere

sublime text3 增加代码片段(snipper)

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

日期选择器对话框在片段中不起作用[关闭]

公路车碳刀