获取节点 js 服务器上特定时区的当前时间
Posted
技术标签:
【中文标题】获取节点 js 服务器上特定时区的当前时间【英文标题】:Get current time of a specific timezone on a node js server 【发布时间】:2015-01-01 16:58:59 【问题描述】:我需要根据用户设置的一些时间策略来验证服务器端的某些事务。我看到的问题是所有政策都与用户时区有关。如果我只保留 GMT 偏移量,如果用户的时区转到 DST(夏令时),我会遇到问题。
我需要在用户端获取一个时区字符串,我应该能够使用它来获取新交易到达时的当前时间(例如:用户设置了一个政策来批准从下午 6 点到晚上 9 点的交易并且用户在德克萨斯州。创建新交易时,我需要验证它是否在德克萨斯州的下午 6 点/晚上 9 点之间)。
非常感谢!
【问题讨论】:
为什么不将所有时间存储为 UTC?那么你就不用关心夏令时、时区偏移等等(但仍然取决于用户的时钟是否准确)。 因为政策与用户的时间相关(例如:周日下午 6 点到晚上 9 点)。我需要检查这些时间段内是否发生了事件。 也将用户的时间转换为 UTC。这些东西在服务器上的处理比在客户端上要好得多。有一些库可以根据分析一年中不同时间的偏移量来检测用户的时区,但是这些库(就像所有客户端程序一样)依赖于为他们所在的时区设置的用户设备。否则,正如 Miroslav 建议的那样, 只使用字符串。 这能回答你的问题吗? How to get the local timezone from the system using nodejs 【参考方案1】:我找到了答案。我必须在服务器端使用https://github.com/mde/timezone-js。我将保留相对于客户端时区字符串的时间并保存用户的时区字符串。 然后为了验证策略,我将得到时区的实际偏移量,如下所示:
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
【讨论】:
现在,不需要库,很简单:***.com/a/65702580/294884【参考方案2】:无论如何我都不是 js 之王,但最近我在一个项目中使用了 moment.js 来比较我们数据库 (utc) 中的时间戳和我们的 webportal 中的时间 (est,对我来说)。它可用于检查夏令时是否偏移,甚至可以将时间转换为 UTC。
您可以在此处阅读他们的文档:http://momentjs.com/docs/
我建议local、utc、difference、Is Daylight Saving Time 和Is DST Shifted
最后两个对你最有用。
我希望这会有所帮助!
【讨论】:
我已经读过它并没有解决问题,因为验证是静态的。我需要知道(可能是通过网络服务)某个位置的当前时间。 不,幸运的是,这很容易:***.com/a/65702580/294884【参考方案3】:将策略的时间转换为 UTC(创建策略时)。这很简单——getTime() (* 1000) 以 (mili) 秒为单位返回时间在 UTC 中。 简单比较服务器 (Date.now()) 上的两个时间戳(均以 UTC 表示)将使您远离时区问题。
(我认为这是 RobG 评论的重点 - 所有时间 UTC)
【讨论】:
我明白,但你没有回答我的问题。如果政策是在 1 月设置的,我会转换为 UTC,然后在 7 月使用 DST 触发交易,我将有一个不正确的政策,因为它将与由于 DST 而相对不同的 GMT 相关。我说清楚了吗? 哦,我明白了,你的意思。您正在更改服务器时间允许批准交易的窗口。无论哪个 DST,它都保持在当地时间 6-9 固定。因此,在这种情况下,您必须向服务器提供有关本地时间偏移量(Date - getTimezoneOffset())的信息,这样您就可以决定它是否符合规则。 (时区偏移随 DST 变化)......或者你可能根本不需要它 - 将时间作为字符串传递并检查 6以上是关于获取节点 js 服务器上特定时区的当前时间的主要内容,如果未能解决你的问题,请参考以下文章
获取节点中特定时区的 UTC 偏移量和 DST 信息? [复制]