nestjs-api-tools
Version:
Wrappers for convenient API development including validation, logging and i18n wrappers
51 lines (38 loc) • 958 B
text/typescript
import {DateTime} from 'luxon';
/**
* Tries to parse any object as luxon.DateTime
* @param v
*/
export function parseDateTime(v: string | Date | DateTime | number | null | undefined): DateTime | null {
if (!v) {
return null;
}
if (v instanceof DateTime) {
return v;
}
if (typeof v === 'string') {
// To parse PostgreSQL datetime with format "2020-12-03 21:05:51+00".
const withoutSpaces = v.replace(' ', 'T');
const fromISO = DateTime.fromISO(withoutSpaces);
if (fromISO.isValid) {
return fromISO;
}
}
const fromJS = DateTime.fromJSDate(v as Date);
if (fromJS.isValid) {
return fromJS;
}
try {
const fromMillis = DateTime.fromMillis(v as number);
if (fromMillis.isValid) {
return fromMillis;
}
const fromSecond = DateTime.fromSeconds(v as number);
if (fromSecond.isValid) {
return fromSecond;
}
} catch (e) {
return null;
}
return null;
}