许多记录上碳的正确时区
Correct time-zone for carbon on many records
所以我正在尝试在 Carbon::today()
上设置正确的时区以获得为这一天创建的所有结果。
让我们再解释一下。
我有一个命令在今天 created_at
列时存档 Notes
,所以我得到了今天创建的所有笔记,并根据 [=17] 在 foreach
中检查它们=]模型时区
数据库结构:
Buildings:
-id
-name
-timezone
Notes:
-id
-name
-created_at
-updated_at
-building_id (reference id on buildings)
我的代码:
$notes = Note::where('archived', null)
->whereDate('created_at',Carbon::today())
->get();
foreach($notes as $note) {
// Set the current timezone
date_default_timezone_set($note->building->timezone)
$note->update([
'archived' =>1,
'archived_at'=>Carbon::now()
]) // update archive status etc...
}
我希望 Carbon::today() 与记录建筑的当前时区一致。
我试过类似的查询,但问题仍未解决:
select
*
from
`notes`
inner join `buildings` on `notes`.`building_id` = `buildings`.`id`
where
date(`notes`.`created_at`) = CONVERT_TZ('NOW()', 'UTC', `building`.`timezone`);
有什么办法吗?谢谢。 :)
date_default_timezone_set
顾名思义就是默认时区,您不应该在同一过程中多次更改默认时区。
实际上它应该始终保持 UTC,这样您就可以轻松地在外部扩展和共享它,然后您可以简单地获取给定时区的现在或今天:
Carbon::today($note->building->timezone)
Carbon::now($note->building->timezone)
但更好的解决方案是将您的日期也存储为数据库中的 UTC,这样您就可以将 created_at
从时区转换为 UTC,而不是将 NOW 从 UTC 转换为 building.timezone
,这样会在您的数据库中实现数据一致性的更好方法。
所以我正在尝试在 Carbon::today()
上设置正确的时区以获得为这一天创建的所有结果。
让我们再解释一下。
我有一个命令在今天 created_at
列时存档 Notes
,所以我得到了今天创建的所有笔记,并根据 [=17] 在 foreach
中检查它们=]模型时区
数据库结构:
Buildings:
-id
-name
-timezone
Notes:
-id
-name
-created_at
-updated_at
-building_id (reference id on buildings)
我的代码:
$notes = Note::where('archived', null)
->whereDate('created_at',Carbon::today())
->get();
foreach($notes as $note) {
// Set the current timezone
date_default_timezone_set($note->building->timezone)
$note->update([
'archived' =>1,
'archived_at'=>Carbon::now()
]) // update archive status etc...
}
我希望 Carbon::today() 与记录建筑的当前时区一致。
我试过类似的查询,但问题仍未解决:
select
*
from
`notes`
inner join `buildings` on `notes`.`building_id` = `buildings`.`id`
where
date(`notes`.`created_at`) = CONVERT_TZ('NOW()', 'UTC', `building`.`timezone`);
有什么办法吗?谢谢。 :)
date_default_timezone_set
顾名思义就是默认时区,您不应该在同一过程中多次更改默认时区。
实际上它应该始终保持 UTC,这样您就可以轻松地在外部扩展和共享它,然后您可以简单地获取给定时区的现在或今天:
Carbon::today($note->building->timezone)
Carbon::now($note->building->timezone)
但更好的解决方案是将您的日期也存储为数据库中的 UTC,这样您就可以将 created_at
从时区转换为 UTC,而不是将 NOW 从 UTC 转换为 building.timezone
,这样会在您的数据库中实现数据一致性的更好方法。