You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.4 KiB
71 lines
1.4 KiB
import { Injectable } from '@angular/core'; |
|
|
|
@Injectable({ |
|
providedIn: 'root', |
|
}) |
|
export class DateUtilities { |
|
/** |
|
* add some days to a date, to compute intervals |
|
* @param days |
|
* @param date |
|
*/ |
|
addDaysToDate(days: number, date: Date) { |
|
date = new Date(date.valueOf()); |
|
date.setDate(date.getDate() + days); |
|
return date; |
|
} |
|
|
|
/** |
|
* |
|
* @param d1 |
|
* @param d2 |
|
* @param interval |
|
*/ |
|
getDatesInRange(d1: Date, d2: Date, interval: number) { |
|
d1 = new Date(d1); |
|
d2 = new Date(d2); |
|
const dates = []; |
|
while (+d1 < +d2) { |
|
dates.push({ |
|
literal: this.formateDate(d1), |
|
date_object: d1, |
|
}); |
|
d1.setDate(d1.getDate() + interval); |
|
} |
|
return [...dates]; |
|
} |
|
|
|
/** |
|
* get the number of days between two dates |
|
* @param d1 |
|
* @param d2 |
|
*/ |
|
dayDiff(d1: Date, d2: Date): number { |
|
return Number(d2.getTime() - d1.getTime() / 31536000000); |
|
} |
|
|
|
/** |
|
* format a date object to the date format used by the inputs of type date |
|
* YYYY-MM-DD |
|
* @param date |
|
*/ |
|
formateDate(date) { |
|
return [ |
|
date.getFullYear(), |
|
this.getDoubleDigits(date.getMonth() + 1), |
|
this.getDoubleDigits(date.getDate()), |
|
].join('-'); |
|
} |
|
|
|
getDoubleDigits(str) { |
|
return ('00' + str).slice(-2); |
|
} |
|
|
|
countDays(startDateInterval: Date, endDateInterval: Date): number { |
|
// compute the number of days in the date interval |
|
if (endDateInterval && startDateInterval) { |
|
return this.dayDiff(endDateInterval, startDateInterval); |
|
} |
|
return 0; |
|
} |
|
}
|
|
|