2018-06-10 12:00:18 +00:00
|
|
|
import * as plugins from './smarttime.plugins';
|
2018-10-16 23:42:36 +00:00
|
|
|
|
2018-10-21 10:12:44 +00:00
|
|
|
export type TAvailableZone = 'Europe/Berlin';
|
|
|
|
|
2018-10-16 23:42:36 +00:00
|
|
|
export class ExtendedDate extends Date {
|
|
|
|
public static fromEuropeanDate(europeanDate: string) {
|
|
|
|
const dateArray = /(.*)\.(.*)\.(.*)/.exec(europeanDate);
|
|
|
|
const luxonDate = plugins.luxon.DateTime.utc(
|
|
|
|
parseFloat(dateArray[3]), // year
|
|
|
|
parseFloat(dateArray[2]), // month
|
|
|
|
parseFloat(dateArray[1]) // day
|
|
|
|
);
|
|
|
|
const unixMilli = luxonDate.toMillis();
|
|
|
|
return new ExtendedDate(unixMilli);
|
|
|
|
}
|
|
|
|
|
2018-10-21 10:12:44 +00:00
|
|
|
/** */
|
2018-10-21 15:32:03 +00:00
|
|
|
public static fromEuropeanDateAndTime(
|
|
|
|
europeanDateArg: string,
|
|
|
|
timeArg: string,
|
|
|
|
zoneArg: TAvailableZone
|
|
|
|
) {
|
2018-10-21 10:12:44 +00:00
|
|
|
const dateArray = /(.*)\.(.*)\.(.*)/.exec(europeanDateArg);
|
2018-10-21 15:32:03 +00:00
|
|
|
const sliceDate = (dateString: string) => {
|
|
|
|
return `0${dateString}`.slice(-2);
|
|
|
|
};
|
2018-11-23 17:29:38 +00:00
|
|
|
const dateTimeString = `${dateArray[3]}-${sliceDate(dateArray[2])}-${sliceDate(
|
|
|
|
dateArray[1]
|
|
|
|
)}T${timeArg}`;
|
|
|
|
const luxonDate = plugins.luxon.DateTime.fromISO(dateTimeString, {
|
|
|
|
zone: zoneArg
|
|
|
|
});
|
2018-10-21 10:12:44 +00:00
|
|
|
const unixMilli = luxonDate.toMillis();
|
|
|
|
return new ExtendedDate(unixMilli);
|
|
|
|
}
|
|
|
|
|
2018-10-16 23:42:36 +00:00
|
|
|
constructor(unixMilli: number) {
|
|
|
|
super(unixMilli);
|
|
|
|
}
|
|
|
|
}
|