funky-framadate-front/src/app/core/services/date.utilities.service.ts

128 lines
3.0 KiB
TypeScript
Raw Normal View History

import { Injectable } from '@angular/core';
2021-05-18 12:45:51 +02:00
import { DateChoice, defaultTimeOfDay } from '../../../../mocks/old-stuff/config/defaultConfigs';
@Injectable({
2020-04-21 10:50:26 +02:00
providedIn: 'root',
})
2021-04-29 10:45:22 +02:00
export class DateUtilitiesService {
2020-04-21 10:50:26 +02:00
/**
2021-05-18 12:12:08 +02:00
* add some dateChoices to a date, to compute intervals
2020-04-21 10:50:26 +02:00
* @param days
* @param date
*/
addDaysToDate(days: number, date: Date) {
date = new Date(date.valueOf());
date.setDate(date.getDate() + days);
return date;
}
2020-04-21 10:50:26 +02:00
/**
*
* @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({
2021-05-17 15:25:22 +02:00
literal: this.formateDateToInputStringNg(d1),
2020-04-21 10:50:26 +02:00
date_object: d1,
});
d1.setDate(d1.getDate() + interval);
}
return [...dates];
2020-04-21 10:50:26 +02:00
}
2020-04-21 10:50:26 +02:00
/**
2021-05-18 12:12:08 +02:00
* get the number of dateChoices between two dates
2020-04-21 10:50:26 +02:00
* @param d1
* @param d2
*/
dayDiff(d1: Date, d2: Date): any {
const div = 1000 * 3600 * 24;
return Math.abs((d2.getTime() - d1.getTime()) / div).toFixed(0);
2020-04-21 10:50:26 +02:00
}
2020-04-21 10:50:26 +02:00
/**
* format a date object to the date format used by the inputs of type date
* YYYY-MM-DD
* @param date
*/
2021-05-17 15:25:22 +02:00
formateDateToInputStringNg(date: Date): string {
2020-04-21 10:50:26 +02:00
return [
date.getFullYear(),
this.getDoubleDigits(date.getMonth() + 1),
this.getDoubleDigits(date.getDate()),
].join('-');
}
2021-05-17 15:25:22 +02:00
/**
* transform a date object to a short date string
* @param inputDate
*/
parseInputDateToDateObject(inputDate: Date): Date {
const boom = inputDate.toISOString().substring(0, 10).split('-');
const converted = new Date(boom['0'], boom['1'] - 1, boom['2']);
console.log('converted', converted);
return converted;
}
2021-05-17 15:25:22 +02:00
/**
* get double in string
* @param str
*/
2020-04-21 10:50:26 +02:00
getDoubleDigits(str) {
return ('00' + str).slice(-2);
}
2021-05-17 15:25:22 +02:00
/**
2021-05-18 12:12:08 +02:00
* compute the number of dateChoices in the date interval
2021-05-17 15:25:22 +02:00
* @param startDateInterval
* @param endDateInterval
*/
countDays(startDateInterval: Date, endDateInterval: Date): number {
if (endDateInterval && startDateInterval) {
return this.dayDiff(endDateInterval, startDateInterval);
}
return 0;
}
2021-05-17 15:25:22 +02:00
/**
2021-05-18 12:12:08 +02:00
* fill default dates for today + the next 3 dateChoices
2021-05-17 15:25:22 +02:00
*/
makeDefaultDateChoices(): DateChoice[] {
const today = new Date();
const ladate = this.addDaysToDate(0, today);
const ladate2 = this.addDaysToDate(1, today);
const ladate3 = this.addDaysToDate(2, today);
const ladate4 = this.addDaysToDate(3, today);
2021-05-17 15:25:22 +02:00
return [
{
literal: this.formateDateToInputStringNg(ladate),
2021-05-18 22:51:06 +02:00
timeSlices: Object.create(defaultTimeOfDay),
2021-05-17 15:25:22 +02:00
date_object: ladate,
},
{
literal: this.formateDateToInputStringNg(ladate2),
2021-05-18 22:51:06 +02:00
timeSlices: Object.create(defaultTimeOfDay),
2021-05-17 15:25:22 +02:00
date_object: ladate2,
},
{
literal: this.formateDateToInputStringNg(ladate3),
2021-05-18 22:51:06 +02:00
timeSlices: Object.create(defaultTimeOfDay),
2021-05-17 15:25:22 +02:00
date_object: ladate3,
},
{
literal: this.formateDateToInputStringNg(ladate4),
2021-05-18 22:51:06 +02:00
timeSlices: Object.create(defaultTimeOfDay),
2021-05-17 15:25:22 +02:00
date_object: ladate4,
},
];
}
}