Add date difference calculator
This commit is contained in:
parent
4b320ff7cf
commit
5b56273ffa
53
date-diff.ts
Normal file
53
date-diff.ts
Normal file
@ -0,0 +1,53 @@
|
||||
// https://stackoverflow.com/a/49201872
|
||||
const calcDateDifference = (
|
||||
start: string | Date,
|
||||
end: string | Date
|
||||
): { year: number; month: number; day: number } => {
|
||||
// Convert to true dates without time
|
||||
let startDate = new Date(new Date(start).toISOString().substring(0, 10));
|
||||
let endDate = new Date(
|
||||
(end ? new Date(end) : new Date()).toISOString().substring(0, 10)
|
||||
);
|
||||
|
||||
// If start date comes after end, flip them around
|
||||
if (startDate > endDate) {
|
||||
const swap = startDate;
|
||||
startDate = endDate;
|
||||
endDate = swap;
|
||||
}
|
||||
|
||||
// Account for leap years
|
||||
const startYear = startDate.getFullYear();
|
||||
const february =
|
||||
(startYear % 4 === 0 && startYear % 100 !== 0) || startYear % 400 === 0
|
||||
? 29
|
||||
: 28;
|
||||
const daysInMonth = [31, february, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
||||
|
||||
// Create year and month diffs
|
||||
let yearDiff = endDate.getFullYear() - startYear;
|
||||
let monthDiff = endDate.getMonth() - startDate.getMonth();
|
||||
if (monthDiff < 0) {
|
||||
yearDiff--;
|
||||
monthDiff += 12;
|
||||
}
|
||||
|
||||
// Create day diff while adjusting others
|
||||
let dayDiff = endDate.getDate() - startDate.getDate();
|
||||
if (dayDiff < 0) {
|
||||
if (monthDiff > 0) {
|
||||
monthDiff--;
|
||||
} else {
|
||||
yearDiff--;
|
||||
monthDiff = 11;
|
||||
}
|
||||
dayDiff += daysInMonth[startDate.getMonth()];
|
||||
}
|
||||
|
||||
// Return true differentials
|
||||
return {
|
||||
year: yearDiff,
|
||||
month: monthDiff,
|
||||
day: dayDiff,
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user