toISOString()更改datetime值

Mic*_*ael 6 javascript timezone datetime

我有对象的数组.数组中的每个对象都有date属性.我试着从数组中得到最大的(最后一个)日期.

这是数组:

var sensorsData = [{
  Id: 1,
  MeasureDate: "2017-08-20T09:52:32"
}, {
  Id: 2,
  MeasureDate: "2017-08-20T09:54:35"
}, {
  Id: 3,
  MeasureDate: "2017-08-20T09:56:13"
}];
Run Code Online (Sandbox Code Playgroud)

而这里是从上面的数组获取最大日期的函数:

function updateLatestDate(sensorsData) {
  return new Date(Math.max.apply(null, sensorsData.map(function(e) {
    return new Date(e.MeasureDate);
  }))).toISOString();
}
Run Code Online (Sandbox Code Playgroud)

我从updateLatestDate函数得到的结果是:

2017-08-20T06:56:13.000Z
Run Code Online (Sandbox Code Playgroud)

但它很奇怪,因为你可以看到sensorsData对象中没有任何属性没有从updateLatestDate函数返回的日期.

这是FIDDLER.

知道为什么updateLatestDate函数返回错误的结果吗?

Dan*_*sky 12

使用new Date(str)它创建日期时,会创建带有时区的日期对象.toISOString()使其为UTC UTC偏移,由后缀"Z"表示.

这是一个解决方法:

var date = new Date(e.MeasureDate)
return new Date(date.getTime() - date.getTimezoneOffset() * 60000)
Run Code Online (Sandbox Code Playgroud)

更新了提琴手:https://jsfiddle.net/xf5jmLL6/7

getTimezoneOffset返回分钟数并new Date预计自1970年1月1日00:00:00 UTC以来的毫秒数,因此乘以60000可提供所需的调整.