Найти минимальные и максимальные даты
Есть массив:
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? Это кажется довольно сложным, так как я не очень опытен в этом языке.
5 ответов
Если ваш массив содержит Date
объекты, то это должно работать. Если он просто содержит строки, такие как '2012-09-12 09:20'
, затем вы можете отсортировать их, и получить 1-й и последний элементы.
a.sort(function(a, b){
return Date.parse(a) - Date.parse(b);
});
var maxT = a[a.length-1];
var minT = a[0];
Math.min
/ max
сравнивает только цифры, а не строки. Не используйте их для представления дат, но используйте Date
объекты - они будут сравниваться по их внутреннему номеру метки времени. Тем не менее, max/min вернет этот внутренний номер, поэтому вам нужно будет преобразовать его обратно в Date
(см. Мин. / Макс. дат в массиве?):
Однако, если вы хотите использовать строки или не можете использовать воссозданную дату, вам нужно будет запустить ее вручную через массив - либо с помощью цикла for, либо с помощью итератора только для ES5.1. .reduce()
:
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];
Попробуй это:
var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));
Я нашел это по более раннему вопросу
Это должно сделать это:
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 maxT=maxDate(a);
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Этот второй метод будет работать только в том случае, если все строки даты имеют одинаковый формат, и если у вас разные даты формата в вашем массиве, вы не сможете использовать эту функцию.
Заполнен ли массив объектами Date? Если так, сравните их, используя их, и сортируйте их, используя один из многих известных алгоритмов.
Если нет, воссоздайте массив с объектами Date, по одному для каждого из них, и сделайте, как я сказал выше, упорядочив массив.