Как я могу получить последнюю дату из массива дат? - Javascript / Машинопись

У меня есть массив таких дат

arr = ["2018-08-01T15:16:34.791Z","2018-08-01T15:16:34.791Z","2018-08- 
01T15:16:34.791Z"]

Поэтому я попытался преобразовать эти даты во время:

convertedArr = arr.map( payment => {
    var converted
    converted = new Date(payment.date_updated).getTime()
    return converted
  })

-А затем рассортируйте их и получите максимальное количество времени с помощью другой функции:

getLatestPayment(convertedArr){

const sortFromHighest = arr => {
  return arr.sort( (a,b) => { return a < b } )
}
var convertedArr = convertedArr
convertedArr = sortFromHighest(convertedArr)
convertedArr = convertedArr.map( elem =>{
  new Date(elem)
})

return paymentsArr[0]

}

Затем я получаю неопределенное значение после этого, потому что я не могу снова преобразовать даты из времени в даты, есть ли реальный способ получить даты из времени? или, может быть, другое решение? заранее спасибо

Возможный дубликат Мин / Макс дат в массиве?

Leon 03.08.2018 00:11

Просто отсортируйте их как строки.

RobG 03.08.2018 05:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
4 387
4

Ответы 4

Просто оставьте их как объекты Date перед сортировкой; не называйте на них getTime(), потому что вы уже можете сравнивать даты с < и >

"Просто оставьте их как объекты Date ..." Я думаю, вы имеете в виду, оставьте их как строки, они отлично отсортируются без преобразования.

RobG 03.08.2018 05:37

Нет, я хотел оставить их как объекты Date, потому что его код в представленном виде пытается вернуть в конце единственный объект Date, а не строку.

Collin Grady 03.08.2018 23:56

Так что просто конвертируйте одну строку в Date, а не конвертируйте их все.

RobG 04.08.2018 08:59

Если вы хотите, чтобы исходное строковое значение могло создать объекты даты в сортировщике и пропустить сопоставление

const arr = ["2018-08-01T15:16:34.791Z","2018-08-01T15:16:34.791Z","2018-08-01T15:16:34.791Z"];

const getLatest = (arr) => arr.sort((a,b) => new Date(b) - new Date(a))[0];

console.info(getLatest(arr))

Почему индекс [0] с вычитанием даты? Должен быть >, поскольку при вводе: var arr = ["2018-08-01T19:16:34.791Z","2011-08-01T11:11:34.791Z","2018‌​-08-01T15:16:34.791Z‌​"] ваш код возвращает наименьшую дату.

Akrion 03.08.2018 00:41

упс ... у меня плохо. Перейдите на new Date(b) - new Date(a), чтобы отменить сортировку ... тогда вам нужен первый

charlietfl 03.08.2018 00:54

Вам вообще не нужно конвертировать в Date, arr.sort() работает как есть. ;-)

RobG 03.08.2018 06:00

Вы также можете использовать несколько более связанный подход functional:

var arr = ["2011-08-01T19:16:34.791Z","2018-08-01T11:11:34.791Z","2012-08-01T15:16:34.791Z"]

console.info(arr.map((x) => new Date(x)).sort().slice(-1))

Однако для больших массивов очень это будет менее производительно.

Это действительно выглядит красиво, спасибо, я пытаюсь стать лучше в этом.

brosej 03.08.2018 00:59

Зачем вообще конвертировать в Date? Просто отсортируйте их как строки, это одно из ключевых преимуществ использования формата ISO 8601.

RobG 03.08.2018 05:38

@RobG - это первое, что я попробовал и хотел опубликовать в качестве решения, но это не так универсально. Если формат даты изменяется до тех пор, пока это допустимый формат, этот should работает.

Akrion 03.08.2018 06:33

"Должен" проблематично, если формат даты изменяет встроенный синтаксический анализатор, все равно может не работать: Почему Date.parse дает неверные результаты?

RobG 03.08.2018 09:09

Если у вас есть строки в формате UTC ISO 8601, они будут отсортированы как строки. Так что просто отсортируйте их и возьмите первый или последний элемент, в зависимости от того, выбрали ли вы самую старую или самую новую дату.

Если вы хотите получить результат в виде даты, просто преобразуйте последний (но обратите внимание на Почему Date.parse дает неверные результаты?

var arr = [
    "2018-08-01T15:16:35.791Z",
    "2018-08-01T15:16:34.791Z",
    "2018-08-05T15:16:34.791Z",
    "2018-08-02T15:16:34.791Z"
    ];
    
console.info('Oldest: ' + arr.sort().slice(0,1));
console.info('Newest: ' + arr.sort().slice(-1));
console.info('Newest: ' + new Date(arr.sort().slice(-1)).toString());

Если бы тот, кто проголосовал против, захотел бы объяснить свой голос, я, возможно, смог бы улучшить ответ.

RobG 04.08.2018 09:00

Другие вопросы по теме