[英]Javascript date object in different locale and timezone
我需要编写一个Web应用程序来显示不同语言环境中的人员事件。 我几乎完成了它,但是日期有2个问题:
()
。 是否可以在javascript中使用给定的时区和日光设置构建日期对象? 我还找到了一些解决方法,例如jsdate和date webservices,但它们没有克服具有正确时区和日光设置的javascript对象的问题(对于日期操作,例如添加天等等)。
要记住几件事。
以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可以是1193855400000
。 而America/New_York
是您在事件发生时检测到的时区。
从中获得的dt
对象将表现为普通的JavaScript Date
对象。 但会自动“纠正”自己指定的时区(包括DST)。
如果您愿意,可以在服务页面之前在后端进行所有更正。 由于我不知道你在那里使用什么编程语言,我不能给你任何直接的提示。 但基本上它遵循相同的逻辑,如果您知道时区,并且UTC日期时间 - >您可以本地化日期时间。 所有编程语言都有用于此的库。
你错过了Date对象的重点。 它代表了一个特定的时间点。 在我发言时,全世界都是1308150623182。 只有当您想要向用户显示时间时,时区才会发挥作用。 像“添加一天”这样的操作根本不涉及时区。
一种可能性是使用UTC日期和时间来处理所有事情。 这样,没有什么可以转换的。
另一种方法是让您的服务器提供时间和日期。 然后,您不必依赖用户正确设置它,并且您不必担心用户的时区位置。
使用getUTCDate()
, getUTCHours()
,...而不是getDate()
, getHours()
,... getTimetoneOffset()
也可能有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.