我有以下日期列表。
var dates = ['05/02/2015', '12/03/2014', '05/02/2012', '05/02/2013'];
我尝试下面但没有工作
var maximumDate = Math.max.apply(Math, dates);
答案 0 :(得分:3)
你有一个字符串数组。您需要将它们解析为日期才能使用Math.max,例如:
var dates = ['05/02/2015', '12/03/2014', '05/02/2012', '05/02/2013'];
alert(new Date(Math.max.apply(Math, dates.map(Date.parse))));
自1970年1月1日00:00:00 UTC以来,这会将所有字符串映射到毫秒数。然后我们将Math.max
应用于这些数字,并从结果中创建一个新的Date
对象。
为此,您需要确保字符串位于an expected format for Date.parse。如果不是,它将回退到特定于实现的解析,这可能会产生意外结果。您可以使用MomentJS之类的日期库从这些字符串创建日期对象。
答案 1 :(得分:0)
Math.max
期望数字作为参数,因此字符串值的比较实际上没有意义,这就是您的样本返回NaN
的原因。
我建议将字符串值转换为Date
个对象,然后比较它们的时间值。
var dates = [ '05/02/2015', '12/03/2014', '05/02/2012', '05/02/2013' ];
// maximum universal time value
var maximumTime = Math.max.apply( null,
// convert time strings to universal time
dates.map( function(d) {
return new Date( d ).getTime( )
} )
);
// date representation of that time
var maximumDate = new Date( maximumTime );