0

我已经描述了这种情况(尝试在不同的时区获取碳时间戳),但我现在遇到了另一个问题。正如我之前所描述的,MySQL 中有多个带有 UTC 'created_at' 时间戳的条目。我需要根据项目的时区检索相关项目的今天条目。如果我直接比较时间戳:

$entry->created_at >= Carbon::today('Europe/Moscow')

然后我得到正确的结果(真)。尽管该条目是昨天在 UTC 中进行的,但它被认为是根据莫斯科时区在今天进行的。

但是当我进行这个查询时:

Entry::where('created_at', '>=', Carbon::today('Europe/Moscow'))

Eloquent 不会检索 UTC 时间 22:30 的条目。正确的查询是什么样的?

4

1 回答 1

0

如果您创建一个简单的 Artisan 命令来输出以下内容:

Carbon::today('Europe/Moscow');

接着

Carbon::today('Europe/London');

你会看到它们是一样的——两者都会输出:

2021-12-08 00:00:00

这是因为每一天在每个时区的同一时间 (00:00:00) 开始。

您想要做的是从今天开始(在您的相关时区),然后将其转换为 UTC(因为这就是您在数据库中所拥有的):

Carbon::today('Europe/Moscow')->setTimezone("UTC");

如果你回显,你得到的结果是:

2021-12-08 21:00:00

因此,查询将返回在 22:30 UTC 创建的条目,因为它是“今天”为莫斯科项目而创建的,而不是为洛杉矶项目而创建的。

于 2021-12-08T10:03:37.033 回答