我正在使用 Laravel/PHP/MySQL 并以 UTC 格式存储所有日期和时间。
用户可以选择时区(例如东部),输入日期和时间,日期和时间将在存储前转换为 UTC。检索时,它将转换为用户选择的时区。
我的问题是如何在考虑时区的情况下(最好在数据库查询中)从一系列记录中获取一天中的平均时间?以下问题解决了 PHP 中一天中的平均时间,但没有解决时区问题。
这是我正在做的:
SEC_TO_TIME( AVG( TIME_TO_SEC( TIME(flights.departed_at) ) ) ) ) AS average_time
这适用于跨越夏令时/标准时间的记录。
例如:您可能有一条 UTC 日期时间为 2015-08-18 11:00:00
的记录这是用户在 EDT 中输入的 2015-08-18 07:00:00
.然后您输入了第二条记录,其 UTC 日期时间为 2015-11-10 12:00:00
。由 EST 的用户在 2015-11-10 07:00:00
.如果您尝试计算一天中的平均时间,它应该等于 07:00:00
但结果是 07:30:00
.
有什么办法可以克服这个问题吗?我处理这一切都错了吗?
提前致谢。
最佳答案
简而言之,您的代码运行正常。一旦日期采用 UTC 格式,您就必须重新计算它是否是 (1) 在夏令时期间输入的,(2) 由实际观察夏令时的人输入的,以及 (3) 在识别夏令时的地方输入的节省时间。
我真的只能想到一种方法来解决这个问题。
在保存数据时添加某种标志,将时间戳标记为夏令时。您可以使用此标志来调整时差。如何生成此标志由您决定。
关于php - 考虑到时区差异,如何计算一天中的平均时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33637887/