Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找最短和最长日期_Javascript_Date_Datetime_Max_Minimum - Fatal编程技术网

Javascript 查找最短和最长日期

Javascript 查找最短和最长日期,javascript,date,datetime,max,minimum,Javascript,Date,Datetime,Max,Minimum,有一个数组: var a = new Array(); 它包含这样的日期条目:“2012-09-12 09:20”等 我需要使用javascript查找最小和最大日期。此代码不适用于时间值 var minT = Math.min.apply(Math, a); var maxT = Math.max.apply(Math, a); 如何用javascript解决这个问题?这似乎很复杂,因为我对这门语言不是很有经验。这应该可以做到: var maxT=new Date(Math.max.app

有一个数组:

var a = new Array();
它包含这样的日期条目:“2012-09-12 09:20”等

我需要使用javascript查找最小和最大日期。此代码不适用于时间值

var minT = Math.min.apply(Math, a);
var maxT = Math.max.apply(Math, a);
如何用javascript解决这个问题?这似乎很复杂,因为我对这门语言不是很有经验。

这应该可以做到:

var maxT=new Date(Math.max.apply(null,a));
var minT=new Date(Math.min.apply(null,a));
如果必须使用字符串,可以定义函数:

function maxDate(data){
    var max = '';
    for(var i=0; i<data.length; i++)
        if(data[i]>max)
            max=data[i];
    return max;
}
免责声明:只有当所有日期字符串的格式相同时,第二种方法才有效。如果数组中的日期格式不同,则无法使用此函数。

请尝试以下方法:

var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));

我在早些时候的一篇文章中找到了它。数组中是否填充了日期对象? 如果是这样,请使用它们进行比较,并使用许多已知算法中的一种对它们进行排序

如果没有,请使用日期对象重新创建数组,每个对象一个,然后按照上面所说的顺序对数组进行排序。

/只比较数字,而不是字符串。不要用它们来表示日期,而要用它们——它们将根据内部时间戳编号进行比较。尽管如此,max/min仍将返回该内部数字,因此您需要将其转换回日期(请参阅):

但是,如果要使用字符串或无法使用重新创建的日期,则需要手动运行数组-使用for循环或仅ES5.1迭代器方法:


如果您的数组包含
Date
对象,那么这应该可以工作。如果它只包含像
'2012-09-12 09:20'
这样的字符串,那么您可以对它们进行排序,并获取第一个和最后一个元素

a.sort(function(a, b){
    return Date.parse(a) - Date.parse(b);
});

var maxT = a[a.length-1];
var minT = a[0];

您的数组是否包含日期字符串或
date
对象?可能是@Rocket:strings的重复,它将与
date
对象一起工作;-)只需添加一些内容-将日期转换为unix时间戳,您可以使用
Math.min.apply
Math.max.apply
,因为unix时间戳是单个整数。@将它们转换为对象是将它们转换为时间戳的一种方法。您可以轻松获取自1970-01-01 00:00:00 UTC(无闰秒)以来的毫秒数。仅当数组包含
Date
对象时,此操作才有效。这里包含字符串。@Rocket你说得对,编辑了我的答案以正确回答问题尼斯,只是数组中项目的顺序被重新组织,并且它创建了很多对象(如果有很多日期,这可能是一个问题),对数组进行排序不是很有效-
O(n log n)
,而min&max需要
O(2n)
。此外,您的排序方法在每次比较中创建两个
Date
对象,而字母数字排序的结果是相同的。@Bergi字母数字排序仅在PAR的顺序为正确的Y-M-D H:M:S时有效,而不是在D/M/Y或M/D/Y.Hmm时有效。为什么
[新日期('2015-01-01')、新日期('2015-03-01')、新日期('2015-02-01')]排序()
从最大到最小排序(至少使用Chrome),而
[新日期('2015-01-01')、新日期('2015-03-01')、新日期('2015-02-01')。排序(函数(a,b){返回a-b;})
按升序正确排序?啊,谢谢,这是有道理的。隐式转换太多。很抱歉把这个话题扯远了。
var min = datestrings.reduce(function(min, cur) {
    return cur < min ? cur : min;
});

// is equivalent to
var min = datestrings[0];
for (var i=1; i<datestrings.length; i++)
    if (datestrings[i] < min)
        min = datestrings[i];
datestrings.sort();
var min = datestrings[0],
    max = datestrings[datestrings.lengh-1];
a.sort(function(a, b){
    return Date.parse(a) - Date.parse(b);
});

var maxT = a[a.length-1];
var minT = a[0];