Итак, у меня есть массив дат в формате в заголовке, например:

const dates = ["2014-13-01T13:81:00.862279Z", "2009-10-04T11:21:00.8322170Z", ...];

Какой самый лучший / правильный способ получить самую раннюю и последнюю дату?

Я вижу очевидные, но неоправданно длинные способы сортировки в каждом сегменте каждой даты, но мне было интересно, есть ли в JavaScript встроенная функция даты, которая могла бы делать это изначально.

Я не хочу импортировать какие-либо библиотеки, такие как Moment.js.

3
peterjwolski 18 Дек 2019 в 21:01

2 ответа

Так как вы сортируете строку, а ваш формат начинается с года, месяца, месяца, часов, минут, вы можете использовать встроенную функцию сортировки. Однако, если формат отличается, то это не будет лучшим выбором

dates.sort()
const dates = ["2014-13-01T13:81:00.862279Z", "2009-10-04T11:21:00.8322170Z", "2009-10-05T11:21:00.8322170Z", "2009-10-04T11:21:00.8422170Z"];
console.log(dates.sort());
3
hydra 18 Дек 2019 в 18:13

Вы можете уменьшить массив и использовать сравнение строк, чтобы получить самый маленький или самый большой ISO 8601 в один цикл

[earliest, latest] = arrayOfISOStrings.reduce((r, iso, i) => {
    if (!i) return [iso, iso];
    if (iso < r[0]) r[0] = iso;
    if (iso > r[1]) r[1] = iso;
    return r;
}, []);
2
Nina Scholz 18 Дек 2019 в 18:48