Skip to content

Instantly share code, notes, and snippets.

@rivaldorodrigues
Created October 15, 2019 20:15
Show Gist options
  • Select an option

  • Save rivaldorodrigues/3c298abd642549a94f033fbc32fa76ac to your computer and use it in GitHub Desktop.

Select an option

Save rivaldorodrigues/3c298abd642549a94f033fbc32fa76ac to your computer and use it in GitHub Desktop.
Utility class for date manipulation with Luxon
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