Laravel中的Carbon日期格式化

3

我有一个 Carbon 对象的数组传递到视图中,如下所示:

return view('booking.choose-days')->with(['weekDays' => $weekDays]);

为了测试一切是否正常,我使用DD命令检查了数组,并发现日期数组已被正确传递:
array:14 [▼
  0 => Carbon {#252 ▼
    +"date": "2017-04-11 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }
  1 => Carbon {#257 ▼
    +"date": "2017-04-12 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }
  2 => Carbon {#256 ▼
    +"date": "2017-04-13 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }
  3 => Carbon {#255 ▼
    +"date": "2017-04-14 00:00:00.000000"
    +"timezone_type": 3
    +"timezone": "Europe/London"
  }

...and so forth

当使用以下方式(完整的HTML被省略)在Blade中遍历数组时:
@foreach ($weekDays as $key => $weekDay)
    <tr id="{{ $key }}">
      <td>
        {{ $weekDay }}
      </td>
    </tr>
@endforeach

这将产生预期输出:
2017-04-11 00:00:00

2017-04-12 00:00:00

2017-04-13 00:00:00

2017-04-14 00:00:00

2017-04-15 00:00:00

...and so forth

然而,当输出如下所示时:
@foreach ($weekDays as $key => $weekDay)
    <tr id="{{ $key }}">
      <td>
        {{ $weekDay->dayOfWeek }} // now accessing a property
      </td>
    </tr>
@endforeach

我收到这个输出:
1
1
2
2
2

与预期的 星期一,星期二,星期三 等不同,数组中的日期是正确的,当以 对象 的形式使用 var_dumped 进行访问时。但是,当访问像 dayOfWeek 这样的属性时,它会给出不正确的属性。

这些日期是通过首先从 URL 中读取 两个时间戳 - 开始日期结束日期 生成的。然后,这两个值都存储在变量中并发送到一个函数中,以删除所有周末日期。

这是调用该函数的方法:

$weekDays = getWeekDays(Carbon::createFromTimestamp($startDate), Carbon::createFromTimestamp($endDate));

以下是函数代码:

function getWeekDays(Carbon $startDate, Carbon $endDate)
{
    for($date = $startDate; $startDate->lte($endDate); $startDate->addDay()) {
        if ($date->isWeekDay()) {
            $weekdays[] = clone $date;
        }
    }

    return $weekdays;
}

有什么想法吗?

谢谢。


很遗憾,不行。但还是谢谢。 - Ows
更奇怪的是,如果我传入连续 5 天或更少的数组,则会使用上述原始代码工作。超过 5 天的任何时间,它就会有点儿疯狂(就像我在看了五个小时的代码之后!) - Ows
你的日期出了些问题...我刚试图重新创建了一下这个问题...如果你在某种情况下将一个变量的日期转换并赋值给另一个变量,那么可能会出现这种情况。例如,如果你这样做$b = $a->addDay();那么实际上会改变变量$a,$a和$b将是同一个变量!请告诉我们你是如何获取这些日期的? - lewis4u
你能试试这个并发送给我吗?我觉得你在某个地方覆盖了这个函数。
https://paste.laravel.io/kQ9O7
- Anar Bayramov
@Ows 发布您的答案以关闭您的问题,也许它会帮助某人。 - Mr. Pyramid
显示剩余3条评论
1个回答

0

你好,请尝试这段代码:

 @foreach ($weekDays as $key => $weekDay)
<tr id="{{ $key }}">
  <td>
    {{    \Carbon\Carbon::parse($weekDay)->format('d/m/Y')->dayOfWeek }} // now accessing a property
  </td>
</tr>
 @endforeach

1
谢谢。我稍后会看一下这个! - Ows

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接