【问题标题】:Laravel support collection not works on the timing have any solution?Laravel 支持合集对时间不起作用有什么解决办法吗?
【发布时间】:2019-10-01 06:35:10
【问题描述】:

Laravel 支持集合不适用于日期和时间。我该如何解决?

$timings = collect([]);

for ($i = 1; $i < 24 ; $i++) {
    $timings->push([
        'start_time' => $i.':50:34'
    ]);
}

以上循环用于生成示例的 24 小时计时。

当我们这样做时,它可以正常工作,但也包括不必要的时间。

$timings->where('start_time', '<=', '11:59:59')->where('start_time', '>=', '00:00:00');
$timings->where('start_time', '>=', '12:00:00')->where('start_time', '<=', '23:59:59');

请帮帮我。

【问题讨论】:

  • 您使用的是字符串,而不是日期时间对象。也许尝试使用碳?

标签: php laravel-5


【解决方案1】:

您似乎使用的是字符串而不是日期对象。字符串不适合您正在进行的比较。

你可以使用Carbon 来创建漂亮的日期对象(laravel 中已经包含了 Carbon)

$timings = collect([]);

for ($i = 1; $i < 24 ; $i++) {
    $timings->push([
        'start_time' => Carbon::createFromTimeString($i.':50:34', 'Europe/London')
    ]);
}

正如this answer 所说:

对于集合,where() 方法不接受运算符。它只进行相等比较。第一个参数是键,第二个是值,第三个是布尔值,用于标记松散比较 (==) 与严格比较 (===)。

您正在寻找的是filter() 方法。你传入一个进行日期比较的闭包。如果 Closure 返回 true,则该项目将保留在 Collection 中。如果返回 false,则从 Collection 中删除该项目。

你的过滤器看起来像这样:

$timings = $timings->filter(function ($item) {
    return (data_get($item, 'start_time') <= Carbon::createFromTimeString('11:59:59', 'Europe/London')) 
        && (data_get($item, 'start_time') >= Carbon::createFromTimeString('00:00:00', 'Europe/London'));
});

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2021-04-19
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多