You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.4 KiB
TypeScript
72 lines
1.4 KiB
TypeScript
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;
|
|
}
|
|
}
|