javascript - 时区 : user preference vs client-side Javascript

标签 javascript web localization timezone

在 Javascript 中,使用 Date 对象的方法来渲染和操作当前用户本地时区的日期相当简单。例如,toLocaleString() 用于输出,Date 构造函数的 7 参数形式用于输入。所以到目前为止,我什至没有费心将时区设置为用户首选项。在内部,所有内容都使用 UTC 进行存储、计算和来回发送给客户端,并且我们在客户端对输入和输出进行翻译。

例如,假设用户将其本地计算机的时区设置为美国东部时间。查看我的网页时,在 Unix 时间戳 1359416775000 发生的事件将呈现为“Mon Jan 28 18:46:15 2013”​​,代码不比

更复杂
new Date(1359416775000).toLocaleString();

但是假设我需要向该用户发送一封有关此事件的电子邮件。我应该使用哪个时区来呈现此电子邮件中的时间戳?显而易见的答案是让用户选择他们的时区。现在假设我执行此操作,并且该用户选择美国/东部。伟大的。现在假设用户下次登录我的网站时,他们的本地计算机是美国中部时间。同一段 Javascript 代码现在会导致时间戳呈现为“Mon Jan 28 17:46:15 2013”​​。

这真的是正确的行为吗?用户在我的应用程序中选择了时区,但它仅适用于电子邮件?

这似乎是一个很常见的问题,我觉得应该有一个常见的最佳实践,我只是想知道那是什么。

最佳答案

默认情况下,您应该始终显示用户本地时区的时间。在任何时候使用另一个时区显示时间时,都应该通过打印时区来明确这一点。

因此,如果用户的时区是美国/东部,您将显示霍斯时区的时间,在您的示例中为“Mon Jan 28 18:46:15 2013”​​,而如果您向他显示实际上的事件发生在美国/中部,您应该显示“Mon Jan 28 17:46:15 2013 US/Central”。

现在,如果用户移动到时区为美国/中部的计算机,那么是的,默认情况下,您现在应该向他显示美国/中部的时间。因此,在这两种情况下,您都将日期显示为“Mon Jan 28 18:46:15 2013”​​,不需要时区。他们会将计算机的当前时间显示在屏幕的一 Angular ,因此不会造成太多困惑。

如果您让用户选择他的时区(这在时间显示不由客户端时区设置决定的网站中很常见),那么默认情况下您应该始终显示该时区的时间,无论计算机所在的时区。请记住,用户有责任确保他的计算机位于正确的时区。大多数携带笔记本电脑旅行的人在搬家时不会更改时区。

理论上,您可以通过从 IP 获取地理位置来警告用户,他已选择了与他似乎所在的时区不同的另一个时区。但除非您正在编写日历应用程序,否则我认为这只会让人们烦恼而不是帮助他们。

关于javascript - 时区 : user preference vs client-side Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14573125/

相关文章:

javascript - 处理多个等待语句中的错误的正确方法

javascript - 如何仅在平板电脑/手机上将主 slider 的布局从 'partialview' 更改为 'fillwidth'

php - 使用 PHP 显示存储在 mySQL 数据库中的图像

spring-boot - 使用Spring Boot在Web应用程序中实现高可用性

iphone - 可以使用 NSLocalizedString 作为字典中的键吗?

javascript - Jquery 可拖动用户界面 |将图像拖入容器时更改图像大小

javascript - 视频播放暂停按钮动画

Spring Security 3.1 - 如何识别用户是否已经登录?

localization - 如何在 nuxt-i18n 文本中包含链接

angular - ngx-translate 不适用于延迟加载模块