【问题标题】:JavaScript / Extjs - Calculate number of hours from time stampJavaScript / Extjs - 从时间戳计算小时数
【发布时间】:2012-12-11 09:00:01
【问题描述】:

我的地图中每辆车都有这个时间戳格式:

2012-12-11T03:51:43+03:00

我想根据当前时间从中提取小时数。

我不知道如何解析这个字符串然后将其与当前时间进行比较。

有什么想法吗?

【问题讨论】:

  • 只是为了补充 Yoshi 的答案,您可能会考虑使用像 MomentJS 这样的库进行解析,因为即使 IE8 也不会解析该字符串。

标签: javascript datetime timezone


【解决方案1】:

类似:

var
  d1 = new Date('2012-12-11T03:51:43+03:00'),
  d2 = new Date;

console.log(
  (d2 - d1) / 3600000
);

【讨论】:

  • @Yoshi:不,实际上,因为你在做日期数学,它会使用毫秒-since-the-epoch 并且时区应该会失效。
  • 但请注意,并非所有浏览器都支持解析该日期字符串。该格式仅在 ES5 中引入(大约三年前),不适用于旧版浏览器。
  • @T.J.Crowder 好的,这可能是因为我只检查了 chrome。
  • 可以用一些正则表达式查找/替换来修复。
  • @SalmanA:不,你最好正确解析它。如果您执行正则表达式,您将 A)进入未指定的领域,并且 B)可能在当地时区工作(同样,尽管未指定)。
【解决方案2】:

您需要先修复除 Chrome 以外的其他浏览器的时间戳

javascript date.parse difference in chrome and other browsers

DEMO

var noOffset = function(s) {
  var day= s.slice(0,-5).split(/\D/).map(function(itm){
    return parseInt(itm, 10) || 0;
  });
  day[1]-= 1;
  day= new Date(Date.UTC.apply(Date, day));  
  var offsetString = s.slice(-5)
  var offset = parseInt(offsetString,10)/100;
  if (offsetString.slice(0,1)=="+") offset*=-1;
  day.setHours(day.getHours()+offset);
  return day.getTime();
}
alert(parseInt((new Date().getTime()-noOffset(yourTimeStamp))/3600000))

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多