在 Web 应用程序中有效地处理不同的时区

Posted

技术标签:

【中文标题】在 Web 应用程序中有效地处理不同的时区【英文标题】:Handle different timezone efficiently in a web application 【发布时间】:2018-01-29 18:28:38 【问题描述】:

我有一个 Web API 可以将一些值存储在带有日期时间的表中。服务器数据库具有UTC时区,因此以UTC格式存储日期时间。将服务器时间存储在日期时间字段中是否正确或需要将客户端时间作为输入?

接下来,另一个 API 提供了一个带有一些日期时间值的 json 格式的数据列表。由于响应是 json 格式,它会将日期时间值转换为毫秒。在 jQuery 中,我们使用 moment.js 来格式化日期时间值并显示给用户。它会根据浏览器时区自动向用户显示日期时间,但有时会显示错误的值。

上述处理时区的方法是否正确?如果要从世界的不同地方访问我的 Web 应用程序,并且假设必须从不同的地方更新相同的请求,那么最好的方法是什么?

【问题讨论】:

这太模糊了。 “将时间存储为时间戳是否正确”->是的,如果该值确实是时间戳。还有至少一个DATE 类型,可能还有一些其他类型。 “有时 [it] 显示错误的值”-> 这是什么意思? “有时”是什么时候? 我的意思是询问服务器时间是否正确或获取用户输入的日期时间字段。接下来必须以服务器时区格式或客户端时区格式存储 【参考方案1】:

许多迎合全球环境的应用程序最常用的方法是存储服务器的 UTC 时间。我想说的是,您所遵循的存储日期时间的机制并没有什么不寻常的,而且还可以。

在检索数据时,不同的情况会满足不同的需求。在这种情况下,您可能会受益于通过 json 发送持久 UTC 日期时间的字符串表示并使用 javascript/jQuery 日期函数转换为 javascript 友好的日期时间对象并使用 moment.js 进行转换或使用 Javascript 转换回本地日期时间自己。

查看以下帖子,了解如何使用 JS 将 UTC 转换为本地:Convert UTC date time to local date time

希望这会有所帮助!

【讨论】:

谢谢,但是如果服务器数据库时区设置为 UTC 以外的时区,例如“亚洲/新加坡”,如何在服务器端处理日期时间?我们还需要将日期时间转换为 UTC 并存储在 db 中吗? 是的,您仍然需要以 UTC 格式存储。您没有在服务器上节省时间 - 而是根据服务器的时区节省 UTC 时间。例如,即使您服务器的时区是亚洲/新加坡,您的 Web 应用程序/API 也必须将当前服务器时间转换为 UTC,这就是您应该保存的时间。这一切背后的原因是,假设有人在新加坡创建了一条记录,但来自美国的用户试图根据美国当地时间找出它的创建时间。如果您没有将其保存为 UTC,则很难映射到美国本地时区。

以上是关于在 Web 应用程序中有效地处理不同的时区的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Web 应用程序中管理时区?

Web 应用程序中的时区敏感日期和时间显示?

使用 Intersystems 处理不同的时区

有效地管理多个相同的数据库? [关闭]

在不同的测试目标之间有效地共享测试替身

Go 中对time包时间和时区处理