我的数据库中的条目具有自定义时间戳字段(例如1488446089)。 如何将whereDate()或whereDay()与unix timstamps一起使用?
这当然适用于日期字段。
$posts = Post::whereDay('uploaded_time', '=', '2017-05-10')->get();
答案 0 :(得分:1)
要正确运行,请使用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
答案 1 :(得分: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个时间戳,一个用于您希望过滤的日期的开头,另一个用于最后一个。之后,我们可以使用构建器的whereBetween()
方法并传递2个时间戳。
I found this solution here,并使用setTime()
和startOfDay
方法替换endOfDay
次来简化了一点。