У меня есть массив таких дат
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]
}
Затем я получаю неопределенное значение после этого, потому что я не могу снова преобразовать даты из времени в даты, есть ли реальный способ получить даты из времени? или, может быть, другое решение? заранее спасибо
Просто отсортируйте их как строки.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто оставьте их как объекты Date перед сортировкой; не называйте на них getTime(), потому что вы уже можете сравнивать даты с < и >
"Просто оставьте их как объекты Date ..." Я думаю, вы имеете в виду, оставьте их как строки, они отлично отсортируются без преобразования.
Нет, я хотел оставить их как объекты Date, потому что его код в представленном виде пытается вернуть в конце единственный объект Date, а не строку.
Так что просто конвертируйте одну строку в Date, а не конвертируйте их все.
Если вы хотите, чтобы исходное строковое значение могло создать объекты даты в сортировщике и пропустить сопоставление
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"] ваш код возвращает наименьшую дату.
упс ... у меня плохо. Перейдите на new Date(b) - new Date(a), чтобы отменить сортировку ... тогда вам нужен первый
Вам вообще не нужно конвертировать в Date, arr.sort() работает как есть. ;-)
Вы также можете использовать несколько более связанный подход 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))Однако для больших массивов очень это будет менее производительно.
Это действительно выглядит красиво, спасибо, я пытаюсь стать лучше в этом.
Зачем вообще конвертировать в Date? Просто отсортируйте их как строки, это одно из ключевых преимуществ использования формата ISO 8601.
@RobG - это первое, что я попробовал и хотел опубликовать в качестве решения, но это не так универсально. Если формат даты изменяется до тех пор, пока это допустимый формат, этот should работает.
Если у вас есть строки в формате 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());Если бы тот, кто проголосовал против, захотел бы объяснить свой голос, я, возможно, смог бы улучшить ответ.
Возможный дубликат Мин / Макс дат в массиве?