时区:用户首选项与客户端 Javascript
time zones: user preference vs client-side Javascript
在Javascript中,使用Date
对象的方法在当前用户的本地时区中呈现和操作日期相当简单。例如,toLocaleString()
表示输出,Date
构造函数的 7 参数形式用于输入。所以到目前为止,我什至没有费心将时区设置为用户首选项。在内部,所有内容都使用 UTC 存储、计算并来回发送到客户端,我们在客户端对输入和输出进行翻译。
例如,假设用户将其本地计算机的时区设置为美国东部。在查看我的网页时,在 Unix 时间戳1359416775000
发生的事件将呈现为"2013 年 1 月 28 日星期一 18:46:15",代码不比
new Date(1359416775000).toLocaleString();
但假设我需要向该用户发送有关此事件的电子邮件。我应该使用哪个时区来呈现此电子邮件中的时间戳?显而易见的答案是让用户选择他们的时区。现在假设我这样做并且该用户选择US/Eastern
.伟大。现在假设用户下次登录我的网站时,他们的本地计算机是美国中部时间。同样的一段 Javascript 代码现在会导致时间戳呈现为"星期一 Jan 28 17:46:15 2013"。
这真的是正确的行为吗?用户在我的应用程序中选择了时区,但它仅适用于电子邮件?
这似乎是一个足够普遍的问题,我觉得应该有一个共同的最佳实践,我只是想知道那是什么。
默认情况下,您应该始终以用户的本地时区显示时间。在您使用另一个时区显示时间的任何时候,都应该通过打印时区来明确这一点。
因此,如果用户时区是美国/东部,则在示例中"星期一 1 月 28 18:46:15 2013"中,将显示 hos 时区的时间,而如果您向他显示实际发生在美国/中部的事件,则应显示"星期一 1 月 28 17:46:15 2013 美国/中部"。
现在,如果用户移动到时区为美国/中部的计算机,那么是的,默认情况下,您现在应该向他显示美国/中部的时间。因此,在这两种情况下,您都将日期显示为"星期一 1 月 28 日 18:46:15 2013",不需要时区。他们将计算机的当前时间放在屏幕的一角,因此不会引起太多混乱。
如果让用户选择其时区(这在时间显示不是由客户端时区设置决定的站点中很常见),则默认情况下,无论计算机位于哪个时区,都应始终显示该时区的时间。请记住,用户有责任确保他的计算机位于正确的时区。大多数携带笔记本电脑旅行的人在搬家时不会更改时区。
从理论上讲,您可以通过从IP获取地理位置来警告用户他选择了另一个时区,而不是他似乎所在的时区。但是,除非您正在编写日历应用程序,否则我认为这更惹恼人们而不是帮助他们。
很遗憾,您无法设置非 UTC 日期方法使用的用户时区。
您只能通过在输出/读取日期时添加/减去自定义时区偏移量来解决此问题,如本例所示。
- 如何将权限/授权数据传递到客户端Javascript
- 如何通过服务器上的Node从客户端JavaScript上传到谷歌云存储
- Telerik RadGrid排序客户端JavaScript jQuery
- 如何在客户端javascript中需要节点模块
- 客户端javascript没有'找不到我的网址
- 使用document.cookie将客户端javascript转换为节点模块
- Fido U2F客户端javascript源代码
- 从服务器端经典 asp 和客户端 javascript 传递字符串
- 如何将 Node.js 环境变量注入客户端 JavaScript
- RSS Feeds - 添加服务器端(PHP)或客户端(JavaScript / jQuery)
- 在客户端 Javascript 方法之后运行服务器方法
- 客户端 JavaScript 没有定义 - 但它在 HTML 源代码中.任何人都知道为什么
- Imgur 通过客户端 javascript 上传工作,但不是 node.js.慌乱了
- 突出显示与perl正则表达式匹配的HTML部分 - 在服务器端perl或客户端javascript中执行此操作
- Django设计模式-在加载时填充客户端JavaScript变量的方法
- 将Date从客户端(Javascript)发送到WebApi的最佳方式是什么
- 客户端JavaScript Facebook OAuth2实现
- 我已经从d3图表中创建了一个base64图像,需要使用客户端javascript或angular将其发布到faceboo
- 使用rest客户端/javascript验证microsoftoutlook-web(owa)
- 如何将客户端javascript返回值传递给ASP经典服务器端