使用 Carbon 增加日期

2024-02-22

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

这是提取行并使用 Carbon 循环遍历日期的代码,以增加一天并将其添加到数组中:

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

$blackoutDays = [];

foreach($reserved as $r)
{
    $start = new \Carbon\Carbon($r->start_date);
    $end = new \Carbon\Carbon($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年1月24日”、“2016年1月25日”、“2016年1月26日”、“2016年1月27日”、“2016年1月28日”、“2016年1月29日”]

但我实际得到的是:

[“2016年1月24日”、“2016年1月25日”、“2016年1月27日”、“2016年1月30日”、“2016年2月3日”、“2016年2月8日”]

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


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

因此,您想要替换

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

with

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

您可能陷入困境的地方是天数是从$start每次调用时的日期对象,但情况并非如此,因为该对象不是“不可变的 https://en.wikipedia.org/wiki/Immutable_object".

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Carbon 增加日期 的相关文章

随机推荐