Javascript日期对象在不同的​​语言环境和时区

时间:2011-06-15 11:14:44

标签: javascript datetime timezone dst

我需要编写一个Web应用程序来显示不同语言环境中的人的事件。我几乎完成了它,但是日期有2个问题:

  • 使用日期javascript对象,日期取决于用户计算机设置,并且不可靠
  • 如果在具有不同时区的地方有一个事件尊重用户当前位置,我必须在()内打印。是否可以在javascript中使用给定的时区和日光设置构建日期对象?

我也找到了一些解决方法,例如jsdate和date webservices,但是它们没有克服使用具有正确时区和日光设置的javascript对象的问题(对于日期操作,例如添加天数等)。 / p>

4 个答案:

答案 0 :(得分:6)

要记住几件事。

以UTC时间存储所有活动日期时间

是的,没有解决这个问题。

找出所有时区......

...系统中的所有用户。您可以使用以下检测脚本:http://site.pageloom.com/automatic-timezone-detection-with-javascript。它将为您提供时区密钥,例如“America / Phoenix”。

在您的情况下,您需要将时区与事件一起存储,因为用户可能会切换时区 - 但事件将始终发生在特定事件中。 (哎呀)

选择显示机制

如果您想使用Javascript本地化您的活动日期,那么也有一个漂亮的库(可以使用前一个脚本提供的密钥)。这里:https://github.com/mde/timezone-js

使用该库,您可以执行此操作:

var dt = new timezoneJS.Date(UTC_TIMESTAMP, 'America/New_York');

var dt = new timezoneJS.Date(2006, 9, 29, 1, 59, 'America/Los_Angeles');

例如,UTC_TIMESTAMP可以是1193855400000America/New_York是您在事件发生时检测到的时区。

从中获取的dt对象将表现为普通的JavaScript Date对象。但会自动“纠正”自己指定的时区(包括夏令时)。

如果您愿意,可以在服务页面之前在后端进行所有更正。由于我不知道你在那里使用什么编程语言,我不能给你任何直接的提示。但基本上它遵循相同的逻辑,如果您知道时区,并且UTC日期时间 - >你可以本地化日期时间。所有编程语言都有可用的库。

答案 1 :(得分:2)

你错过了Date对象的观点。它代表了一个特定的时间点。在我发言时,全世界都是1308150623182。只有当您想要显示给用户的时间时,时区才会发挥作用。像“添加一天”这样的操作根本不涉及时区。

答案 2 :(得分:0)

一种可能性是将UTC日期和时间用于所有事情。这样,没有什么可以转换的。

另一种方法是让您的服务器提供时间和日期。然后,您不必依赖用户正确设置它,您也不必担心用户的时区在哪里。

答案 3 :(得分:0)

使用getUTCDate()getUTCHours(),...代替getDate()getHours(),... getTimetoneOffset()也可能有用。