获取节点js服务器上特定时区的当前时间

时间:2014-11-05 13:19:59

标签: javascript node.js timezone dst gmt

我需要根据用户设置的某些时间策略验证服务器端的某些事务。我看到的问题是所有策略都与用户时区相关。如果我只保留GMT偏移,如果用户的时区进入夏令时(夏令时),我会遇到问题。

我需要在用户端获取一个时区字符串,我应该可以使用它来获取新事务到达时的当前时间(例如:用户设置策略以批准从下午6点到晚上9点的事务并且用户在德克萨斯州。当创建新交易时,我需要验证它是否在德克萨斯州的下午6点/晚上9点之间。

非常感谢!

3 个答案:

答案 0 :(得分:1)

我找到了答案。我必须在服务器端使用https://github.com/mde/timezone-js。我将保留相对于客户端时区字符串的时间并保存用户的时区字符串。 然后验证策略我会得到时区的实际偏移量,如下所示:

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

此偏移量是使用夏令时更新:

// Pre-DST-leap
var dt = new timezoneJS.Date(2006, 9, 29, 1, 59, 'America/Los_Angeles');
dt.getTimezoneOffset(); => 420
// Post-DST-leap
var dt = new timezoneJS.Date(2006, 9, 29, 2, 0, 'America/Los_Angeles');
dt.getTimezoneOffset(); => 480

答案 1 :(得分:0)

我无论如何都不是js king,但最近我在一个项目中使用了moment.js来比较我们数据库中的时间戳(utc)和我们webportal中的时间戳(对我而言)。它可用于检查夏令时是否转移,甚至将时间转换为utc。

您可以在此处阅读他们的文档:http://momentjs.com/docs/

我建议localutcdifferenceIs Daylight Saving TimeIs DST Shifted

最后两个对你最有用。

我希望这有帮助!

答案 2 :(得分:0)

将策略的时间转换为UTC(创建策略时)。这很简单 - getTime()(* 1000)以UTC()的形式返回(mili)秒的时间。 简单比较服务器上的两个时间戳(均为UTC)(Date.now())将让您远离时区问题。

(我认为这是RobG评论的主要观点 - 所有时间在UTC中)