如何将HTTP日期转换为延迟(以毫秒为单位)

时间:2014-08-19 11:30:15

标签: javascript date datetime timezone

我正在制作一个Node.js服务,它需要发出HTTP GET请求,并在遇到503响应时重试它们。

来自W3.org' Header Field Definitions

  

Retry-After响应标头字段可与503一起使用(服务   不可用)响应以指示服务预期的时间   请求客户端无法访问。 [...]此字段的值   可以是HTTP日期或整数秒(in   十进制)在响应时间之后。 [...]两个使用它的例子   是

   Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
   Retry-After: 120

我想使用此信息在适当的时间触发重试。这很容易用秒,因为我可以轻松地将它们转换为毫秒和setTimeout(fn, ms)。 HTTP日期版本要困难得多。我需要找到服务器的时区,将提供的日期转换为该时区,从提供的时间中减去当前时间,将结果转换为毫秒,然后setTimeout(fn, ms)如果ms为正

当然,我可以做到这一切,但我希望已经有一个库可以存在,因为这似乎是一件相当常见的事情。但是,我似乎无法找到一个。任何线索?

1 个答案:

答案 0 :(得分:1)

怎么样

var d = new Date("Tue, 19 Aug 2014 13:50:59 GMT"); // d is in your timezone now
d.setSeconds(d.getSeconds()+120);
var diff = d.getTime()-Date.now();
if (diff>0) var tId=setTimeout(something,diff);

JSFIDDLE