在Javascript中,使用Date
对象的方法在当前用户的本地时区中呈现和操作日期相当简单。例如,输出的toLocaleString()
和输入的Date
构造函数的7参数形式。所以直到现在我还没有把时区设置为用户偏好。在内部,所有内容都使用UTC进行存储,计算和来回发送给客户端,我们在客户端进行输入和输出的转换。
例如,假设用户将其本地计算机的时区设置为US Eastern。在查看我的网页时,在Unix时间戳1359416775000
发生的事件将呈现为“2013年1月28日星期一18:46:15”,代码不会比
new Date(1359416775000).toLocaleString();
但是假设我需要向该用户发送有关此事件的电子邮件。我应该使用哪个时区来呈现此电子邮件中的时间戳?显而易见的答案是让用户选择他们的时区。现在假设我这样做,这个用户选择US/Eastern
。大。现在假设用户下次登录我的网站时,他们的本地计算机在美国中部时间。相同的Javascript代码现在会使时间戳呈现为“Mon Jan 28 17 :46:15 2013”。
这真的是正确的行为吗?用户已在我的应用程序中选择了一个时区,但它仅适用于电子邮件?
这似乎是一个普遍的问题,我觉得应该有一个共同的最佳实践,我只是想知道那是什么。
答案 0 :(得分:2)
默认情况下,您应始终在用户本地时区显示时间。在任何时候你使用另一个时区显示时间,这也应该通过打印时区来明确。
因此,如果用户时区是美国/东部,您将在您的示例“Mon Jan 28 18:46:15 2013”中显示时区的时间,而如果您向他显示实际的事件发生在美国/中部,您应该显示“Mon Jan 28 17:46:15 2013 US / Central”。
现在,如果用户移动到时区为US / Central的计算机,则是,默认情况下,您现在应该向他显示美国/中部的时间。因此,在两种情况下,您都会将日期显示为“Mon Jan 28 18:46:15 2013”,不需要时区。他们将计算机当前时间放在屏幕的角落,这样就不会引起太多混乱。
如果您让用户选择他的时区,这在时间显示不是由客户端时区设置决定的网站中很常见,那么您应该默认显示该时区的时间,无论是计算机所在的时区。请记住,由用户确保他的计算机处于正确的时区。大多数携带笔记本电脑旅行的人在搬家时都不会改变时区。
理论上,您可以通过从IP获取地理位置来警告用户他已经选择了另一个时区而不是他似乎所在的时区。但除非你正在编写一个日历应用程序,否则我认为惹恼人们的不仅仅是帮助他们。
答案 1 :(得分:1)
很遗憾,您无法设置非UTC日期方法使用的用户时区。
您只能通过在输出/读取日期时添加/减去自定义时区偏移来解决此问题,例如在this example中。