我需要根据用户设置的某些时间策略验证服务器端的某些事务。我看到的问题是所有策略都与用户时区相关。如果我只保留GMT偏移,如果用户的时区进入夏令时(夏令时),我会遇到问题。
我需要在用户端获取一个时区字符串,我应该可以使用它来获取新事务到达时的当前时间(例如:用户设置策略以批准从下午6点到晚上9点的事务并且用户在德克萨斯州。当创建新交易时,我需要验证它是否在德克萨斯州的下午6点/晚上9点之间。
非常感谢!
答案 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/
我建议local,utc,difference,Is Daylight Saving Time和Is DST Shifted
最后两个对你最有用。
我希望这有帮助!
答案 2 :(得分:0)
将策略的时间转换为UTC(创建策略时)。这很简单 - getTime()(* 1000)以UTC()的形式返回(mili)秒的时间。 简单比较服务器上的两个时间戳(均为UTC)(Date.now())将让您远离时区问题。
(我认为这是RobG评论的主要观点 - 所有时间在UTC中)