如何从日期数组中获取最大和最小数据

时间:2015-07-23 07:04:51

标签: javascript arrays

我有以下日期列表。

var dates = ['05/02/2015', '12/03/2014', '05/02/2012', '05/02/2013'];

我尝试下面但没有工作

var maximumDate = Math.max.apply(Math, dates);

2 个答案:

答案 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 );