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

我需要根据用户设置的一些时间策略来validation服务器端的某些事务。 我看到的问题是,所有的政策是相对于用户时区。 如果我只保留GMT偏移,我会得到问题,如果用户的时区去夏时制(夏时制)。

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

万分感谢!

我发现了这个问题。 我必须在服务器端使用https://github.com/mde/timezone-js 。 我会保持相对于客户端的时区string的时间,并保存用户的时区string。 然后为了validation这个策略,我会得到像这样的时区的实际偏移:

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

这个偏移量是用DST更新的:

 // 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 

我不是任何一个js国王,但是最近我在一个项目中使用了moment.js来比较我们的数据库(utc)中的时间戳和webportal中的时间戳(est,对我来说)。 它可以用来检查夏令时是否转换,甚至是将时间转换为utc。

你可以在这里阅读他们的文档: http : //momentjs.com/docs/

我会build议本地 , utc , 差异 , 是夏令时和DST转移

最后两个对你最有用。

我希望这有帮助!

将策略时间转换为UTC(创build策略时)。 这很简单 – getTime()(* 1000) 以UTC (毫秒)为单位返回时间。 在服务器(Date.now())上简单地比较两个时间戳(UTC都是这样),可以让你避免时区问题。

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