我有从数组中返回最大日期的函数:
function getResult(){
var arr=[{Id:540, MeasureDate:"2016-06-27T15:06:47"},
{Id:541, MeasureDate:"2016-06-27T12:24:39"}];
title.innerHTML = new Date(Math.max.apply(null, arr.map(function (e){
return new Date(e.MeasureDate);
}))).toISOString();}
以下是fiddler。
当我在chrome
和IE
打开上面的小提琴示例时,我会得到不同的结果。
知道为什么吗?
答案 0 :(得分:1)
Math.max
函数假定其参数中的所有内容都可以转换为数字。对于一个日期来说,这不一定是真的(并且显然在IE中搞砸了,毫不奇怪)。
这是否有效:
title.innerHTML = new Date(Math.max.apply(null, arr.map(function (e){
return new Date(e.MeasureDate).getTime();
}))).toISOString();
答案 1 :(得分:1)
还有一个解决方案。在可读性方面,在一行中执行所有步骤并不是一个好主意。
var maxDate = Math.max(...arr.map((e)=> new Date(e.MeasureDate)))
title.innerHTML = new Date(maxDate).toISOString();
答案 2 :(得分:1)
如果要求返回最新的日期字符串,即最大数字,则可以使用String.prototype.match()
,Array.prototype.sort()
var arr=[{Id:540, MeasureDate:"2016-06-27T15:06:47"},
{Id:541, MeasureDate:"2016-06-27T12:24:39"}];
function n(d) {
return d.match(/\d+/g).join("")
}
var res = arr.sort(function(a, b) {
return +n(b.MeasureDate) - +n(a.MeasureDate)
})[0].MeasureDate;
document.body.textContent = res;