【问题标题】:Laravel Eloquent whereDate() with UnixTimestampsLaravel Eloquent whereDate() 与 UnixTimestamps
【发布时间】:2017-05-11 07:28:23
【问题描述】:

我的数据库中的条目有一个自定义时间戳字段(例如 1488446089)。 如何将 whereDate() 或 whereDay() 与 unix 时间戳一起使用?

这当然只适用于日期字段。

$posts = Post::whereDay('uploaded_time', '=', '2017-05-10')->get();

【问题讨论】:

  • whereDay() 通过我们只能从您的时间戳列中获取特定的日期记录,例如,如果您想获取每个月的第 10 天记录,您可以看到下面的输出示例。 $posts = Post::whereDay('uploaded_time', '=', '10')->get();
  • 查看此链接laraveldaily.com/…

标签: php laravel laravel-5


【解决方案1】:

一种方法是获取所有帖子,然后在 PHP 中过滤结果:

    $myDate = '2017-05-10';

    $posts = Post::all()->filter(function (Post $post) use ($myDate) {
        $uploadedAt = Carbon::createFromTimestamp($post->uploaded_time)->format('Y-m-d');
        return $uploadedAt === $myDate;
    });

为什么?因为如果我是对的,您正在尝试获取在某个日期上传的所有帖子。这意味着有一系列有效的时间戳。 (60 * 60 * 24)。使用 Carbon(Laravel 附带),您可以轻松地将时间戳转换为 Y-m-d 格式的字符串。然后将它们与您选择的日期字符串进行比较。

编辑

我目前无法对此进行测试,但毕竟应该可以使用查询构建器来测试:

$myDate = Carbon::createFromFormat('Y-m-d', '2017-05-10');
$startOfDayTimestamp = $myDate->startOfDay()->timestamp;
$endOfDayTimestamp = $myDate->endOfDay()->timestamp;

$posts = Post::whereBetween('uploaded_time', [
    $startOfDayTimestamp,
    $endOfDayTimestamp
])->get();

在这里,我们创建了 2 个时间戳,一个用于您希望过滤的日期的最开始,一个用于结束。之后,我们就可以使用builder的whereBetween()方法,传递2个时间戳了。

I found this solution here,并通过将setTime() 调用替换为startOfDayendOfDay 方法进行了一点简化。

【讨论】:

    【解决方案2】:

    要正确运行它,请使用whereDate 而不是whereDay

    $posts = Post::whereDate('uploaded_time', '2017-05-10')->get();
    

    获取所有特定日期的意思(月份日期,如1-30

    $posts = Post::whereDay('uploaded_time', '10')->get();//provide date of month
    

    了解更多详情:https://laravel.com/docs/master/queries#where-clauses

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2018-02-07
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多