Created
October 15, 2019 20:15
-
-
Save rivaldorodrigues/3c298abd642549a94f033fbc32fa76ac to your computer and use it in GitHub Desktop.
Utility class for date manipulation with Luxon
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { DateTime } from 'luxon'; | |
| export enum FORMATO { | |
| DATA_HORA_PADRAO = 'dd/MM/yyyy HH:mm', | |
| DATA_HORA_PADRAO_2 = 'dd/MM/yyyy HH:mm:ss', | |
| DATA_HORA_ZONA_URL_1 = 'yyyy-MM-dd\'T\'HH:mm:ss', | |
| DATA_HORA_ZONA_URL_2 = 'yyyy-MM-dd\'T\'HH:mm:ssZ', | |
| DATA_HORA_ZONA_URL_3 = 'yyyy-MM-dd\'T\'HH:mm:ss.S', | |
| DATA_HORA_ZONA_URL_4 = 'yyyy-MM-dd\'T\'HH:mm:ss.SZ', | |
| DATA_HORA_URL_1 = 'YYYY-MM-DD HH:mm:ss', | |
| DATA_HORA_URL_2 = 'YYYY-MM-DD HH:mm:ssZ', | |
| DATA_HORA_URL_3 = 'YYYY-MM-DD HH:mm:ss.S', | |
| DATA_HORA_URL_4 = 'YYYY-MM-DD HH:mm:ss.SZ', | |
| DATA_HORA_REALM = 'yyyy-MM-dd@HH:mm:ss', | |
| DATA_URL = 'yyyy-MM-dd', | |
| DATA_PADRAO = 'dd/MM/yyyy', | |
| HORA_PADRAO = 'HH:mm' | |
| } | |
| export class DataUtil { | |
| static dataComHora(data: DateTime | string | Date | number, hora: string): DateTime { | |
| const dataString = DataUtil.toString(data, FORMATO.DATA_PADRAO); | |
| return DataUtil.dataHoraToDateTime(dataString, hora); | |
| } | |
| static dataHoraToDateTime(data: string, hora: string): DateTime { | |
| return DataUtil.toDateTime(`${data} ${hora}`); | |
| } | |
| static toDateTime(data: string | Date | number): DateTime { | |
| let dateTime: DateTime; | |
| if (data instanceof Date) { | |
| dateTime = DateTime.fromJSDate(data); | |
| } else if (typeof data === 'number') { | |
| dateTime = DateTime.fromMillis(data); | |
| } else { | |
| for (let formato in FORMATO) { | |
| dateTime = DateTime.fromFormat(data, FORMATO[formato]); | |
| console.log(`Testando formato: ${FORMATO[formato]}`); | |
| if (dateTime && dateTime.isValid) { | |
| break; | |
| } | |
| } | |
| if (!dateTime || !dateTime.isValid) { | |
| console.error(`Formato inválido. ${data}`); | |
| throw new Error(`Formato inválido. ${data}`); | |
| } | |
| } | |
| return dateTime; | |
| } | |
| static toJSDate(data: DateTime | string | Date | number): Date { | |
| let dateTime: DateTime; | |
| if (data instanceof DateTime) { | |
| dateTime = data; | |
| } else { | |
| dateTime = DataUtil.toDateTime(data); | |
| } | |
| return dateTime.toJSDate(); | |
| } | |
| static toString(data: DateTime | string | Date | number, formato = FORMATO.DATA_HORA_PADRAO): string { | |
| console.log('Data recebida', data); | |
| let dateTime: DateTime; | |
| if (data instanceof DateTime) { | |
| dateTime = data; | |
| } else { | |
| dateTime = DataUtil.toDateTime(data); | |
| } | |
| return dateTime.toFormat(formato); | |
| } | |
| static toISO(data: DateTime | string | Date | number): string { | |
| let dateTime: DateTime; | |
| if (data instanceof DateTime) { | |
| dateTime = data; | |
| } else { | |
| dateTime = DataUtil.toDateTime(data); | |
| } | |
| return dateTime.toISO(); | |
| } | |
| static fromISO(data: string | undefined): DateTime | undefined { | |
| if (!data) { | |
| return undefined; | |
| } | |
| const dateTime = DateTime.fromISO(data); | |
| return (dateTime.isValid) ? dateTime : undefined; | |
| } | |
| static toRealmString(data: DateTime | string | Date | number) { | |
| return DataUtil.toString(data, FORMATO.DATA_HORA_REALM); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment