Here I am receiving the array of dates like this from the API,
let dates = ["22/1/2022","22/7/2022","9/10/2018"]
From these dates, I need to get the most recent date i.e 22/07/2022
.
I got the below example from a site, This code works correctly only if the date matches the format of YYYY/MM/DD
.
CODE
function max_date(all_dates) {
var max_dt = all_dates[0],
max_dtObj = new Date(all_dates[0]);
all_dates.forEach(function (dt, index) {
if (new Date(dt) > max_dtObj) {
max_dt = dt;
max_dtObj = new Date(dt);
}
});
return max_dt;
}
console.log(max_date(["2015/02/01", "2022/02/02", "2023/01/03"]));
Can we use some packages like date-fns
or momentjs
. to get the desired result despite the date format (or) with JS itself its achievable?
Please let me know your solution for this.
CodePudding user response:
With date-fns you can do it like
import { max, parse } from "date-fns"
const dates = ["22/1/2022","22/7/2022","9/10/2018"];
console.log(max(dates.map((d) => parse(d, "d/M/yyyy", new Date()))))
// returns Fri Jul 22 2022 00:00:00 GMT 0200 (Central European Summer Time)
CodePudding user response:
You can use pure Javascript for the logic
- Convert strings to dates
- Use timestamps (by
getTime()
) to find max - Convert that max timestamp back to date or string
const dates = ["22/1/2022", "22/7/2022", "9/10/2018"]
const convertStringToDate = (dateString) => {
const [day, month, year] = dateString.split("/");
return new Date(year, month - 1, day);
}
function format(inputDate) {
let date, month, year;
date = inputDate.getDate();
month = inputDate.getMonth() 1;
year = inputDate.getFullYear();
return `${date}/${month}/${year}`;
}
const timestamps = dates.map(date => convertStringToDate(date).getTime())
const max = Math.max(...timestamps)
console.log(format(new Date(max)))
CodePudding user response:
Sorting in descending order and returning the first element will do the work.
let dates = ['22/1/2022', '22/7/2022', '9/10/2018'];
const latestDate = (dates) => {
dates.sort((a, b) => {
const date1 = new Date(a.split('/').reverse().join('-'));
const date2 = new Date(b.split('/').reverse().join('-'));
return date2 - date1;
});
// First el will be latest date
return dates[0];
};
console.log(latestDate(dates));
// Output: 22/7/2022