【问题标题】:time zones: user preference vs client-side Javascript时区:用户偏好与客户端 Javascript
【发布时间】:2013-01-12 10:42:25
【问题描述】:

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

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

new Date(1359416775000).toLocaleString();

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

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

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

【问题讨论】:

  • 我不清楚问题是什么。 :-)
  • 我添加了一个例子。希望对您有所帮助。

标签: javascript web localization timezone


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    很遗憾,您无法设置非 UTC 日期方法使用的用户时区。

    您只能通过在输出/读取日期时添加/减去自定义时区偏移量来解决此问题,例如 this example

    【讨论】:

    • 对,这就是我要避免的。网站上的约定是否真的允许用户选择一个时区以仅使用该时区并在呈现日期时忽略其本地机器设置?
    • 我不知道“约定”,但这是正确完成的唯一方法。但是,这并不意味着忽略用户的本地设置,它们仍然可以用作默认时区选择。
    猜你喜欢
    • 1970-01-01
    • 2017-09-19
    • 2022-01-21
    • 2011-05-15
    • 2018-08-12
    • 2011-08-07
    • 1970-01-01
    • 2011-05-07
    • 2012-05-05
    相关资源
    最近更新 更多