UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

61 lines 8.29 kB
/** * @author pfontanet * @since 0.7 */ export class DateUtils { constructor() { } /** * Transforme un string représentant une date au format `'dd/mm/yyyy'` en objet `Date`. * Le siècle peut-être sur 2 digits, dans ce cas, cela correspond à `'19yy'`. * @returns Date ou undefined */ static parseDateFr(dateStr) { const regexp = /^(?<day>3[01]|0?[1-9]|[12][0-9])\/(?<month>1[0-2]|0?[1-9])\/(?<year>[0-9]{4})$/; return DateUtils.parseDate(dateStr, regexp); } /** * Transforme un string représentant une date au format ISO 8601 en objet `Date`. * @returns Date ou undefined */ static parseDateIso(dateStr) { // https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s07.html const regexp = /^(?<year>-?(?:[1-9][0-9]*)?[0-9]{4})-(?<month>1[0-2]|0[1-9])-(?<day>3[01]|0[1-9]|[12][0-9])(T(?<hour>2[0-4]|[01][0-9]):(?<minute>[0-5][0-9]):(?<second>[0-5][0-9])(?<ms>\.[0-9]+)?(?<timezone>Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?)?$/; return DateUtils.parseDate(dateStr, regexp); } /** * Retourne une Date UTC, sans heure, minute seconde, à partir d'une date * @param date */ static date2Utc(date) { return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())); } /** * Retourne une Date UTC, sans heure, minute seconde, selon plusieurs formats en entrée * @param value */ static dateUtcOf(value) { let date = undefined; if (typeof value === 'string') date = DateUtils.parseDateIso(value); else if (typeof value === 'number') date = DateUtils.numberToDateUtc(value); else if (value) date = DateUtils.date2Utc(value); return date; } static parseDate(dateStr, regexp) { if (!dateStr) return undefined; const execArr = regexp.exec(dateStr); const groups = execArr?.groups; const valid = !!groups && !!groups['year'] && !!groups['month'] && !!groups['day']; return !valid ? undefined : new Date(Date.UTC(Number(groups['year']), Number(groups['month']) - 1, Number(groups['day']))); } static numberToDateUtc(n) { const d = new Date(n); return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1kc2ZyLWNvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdXRpbHMvZGF0ZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNwQixnQkFBdUIsQ0FBQztJQUV4Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFlO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLGdGQUFnRixDQUFDO1FBQ2hHLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBZTtRQUNqQywrRkFBK0Y7UUFDL0YsTUFBTSxNQUFNLEdBQ1YsME9BQTBPLENBQUM7UUFFN08sT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFVO1FBQ3hCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBZ0Q7UUFDL0QsSUFBSSxJQUFJLEdBQXFCLFNBQVMsQ0FBQztRQUV2QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMvRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2RSxJQUFJLEtBQUs7WUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQWUsRUFBRSxNQUFjO1FBQ3RELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFL0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkYsT0FBTyxDQUFDLEtBQUs7WUFDWCxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVPLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBUztRQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGF1dGhvciBwZm9udGFuZXRcbiAqIEBzaW5jZSAwLjdcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGVVdGlscyB7XG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1lIHVuIHN0cmluZyByZXByw6lzZW50YW50IHVuZSBkYXRlIGF1IGZvcm1hdCBgJ2RkL21tL3l5eXknYCBlbiBvYmpldCBgRGF0ZWAuXG4gICAqIExlIHNpw6hjbGUgcGV1dC3DqnRyZSBzdXIgMiBkaWdpdHMsIGRhbnMgY2UgY2FzLCBjZWxhIGNvcnJlc3BvbmQgw6AgYCcxOXl5J2AuXG4gICAqIEByZXR1cm5zIERhdGUgb3UgdW5kZWZpbmVkXG4gICAqL1xuICBzdGF0aWMgcGFyc2VEYXRlRnIoZGF0ZVN0cjogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVnZXhwID0gL14oPzxkYXk+M1swMV18MD9bMS05XXxbMTJdWzAtOV0pXFwvKD88bW9udGg+MVswLTJdfDA/WzEtOV0pXFwvKD88eWVhcj5bMC05XXs0fSkkLztcbiAgICByZXR1cm4gRGF0ZVV0aWxzLnBhcnNlRGF0ZShkYXRlU3RyLCByZWdleHApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybWUgdW4gc3RyaW5nIHJlcHLDqXNlbnRhbnQgdW5lIGRhdGUgYXUgZm9ybWF0IElTTyA4NjAxIGVuIG9iamV0IGBEYXRlYC5cbiAgICogQHJldHVybnMgRGF0ZSBvdSB1bmRlZmluZWRcbiAgICovXG4gIHN0YXRpYyBwYXJzZURhdGVJc28oZGF0ZVN0cjogc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MTQ0OTMyNzQ1My9jaDA0czA3Lmh0bWxcbiAgICBjb25zdCByZWdleHAgPVxuICAgICAgL14oPzx5ZWFyPi0/KD86WzEtOV1bMC05XSopP1swLTldezR9KS0oPzxtb250aD4xWzAtMl18MFsxLTldKS0oPzxkYXk+M1swMV18MFsxLTldfFsxMl1bMC05XSkoVCg/PGhvdXI+MlswLTRdfFswMV1bMC05XSk6KD88bWludXRlPlswLTVdWzAtOV0pOig/PHNlY29uZD5bMC01XVswLTldKSg/PG1zPlxcLlswLTldKyk/KD88dGltZXpvbmU+WnxbKy1dKD86MlswLTNdfFswMV1bMC05XSk6WzAtNV1bMC05XSk/KT8kLztcblxuICAgIHJldHVybiBEYXRlVXRpbHMucGFyc2VEYXRlKGRhdGVTdHIsIHJlZ2V4cCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgdW5lIERhdGUgVVRDLCBzYW5zIGhldXJlLCBtaW51dGUgc2Vjb25kZSwgw6AgcGFydGlyIGQndW5lIGRhdGVcbiAgICogQHBhcmFtIGRhdGVcbiAgICovXG4gIHN0YXRpYyBkYXRlMlV0YyhkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuZSBEYXRlIFVUQywgc2FucyBoZXVyZSwgbWludXRlIHNlY29uZGUsIHNlbG9uIHBsdXNpZXVycyBmb3JtYXRzIGVuIGVudHLDqWVcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBzdGF0aWMgZGF0ZVV0Y09mKHZhbHVlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGxldCBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIGRhdGUgPSBEYXRlVXRpbHMucGFyc2VEYXRlSXNvKHZhbHVlKTtcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSBkYXRlID0gRGF0ZVV0aWxzLm51bWJlclRvRGF0ZVV0Yyh2YWx1ZSk7XG4gICAgZWxzZSBpZiAodmFsdWUpIGRhdGUgPSBEYXRlVXRpbHMuZGF0ZTJVdGModmFsdWUpO1xuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZURhdGUoZGF0ZVN0cjogc3RyaW5nLCByZWdleHA6IFJlZ0V4cCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghZGF0ZVN0cikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGV4ZWNBcnIgPSByZWdleHAuZXhlYyhkYXRlU3RyKTtcbiAgICBjb25zdCBncm91cHMgPSBleGVjQXJyPy5ncm91cHM7XG4gICAgY29uc3QgdmFsaWQgPSAhIWdyb3VwcyAmJiAhIWdyb3Vwc1sneWVhciddICYmICEhZ3JvdXBzWydtb250aCddICYmICEhZ3JvdXBzWydkYXknXTtcblxuICAgIHJldHVybiAhdmFsaWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IG5ldyBEYXRlKERhdGUuVVRDKE51bWJlcihncm91cHNbJ3llYXInXSksIE51bWJlcihncm91cHNbJ21vbnRoJ10pIC0gMSwgTnVtYmVyKGdyb3Vwc1snZGF5J10pKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBudW1iZXJUb0RhdGVVdGMobjogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKG4pO1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIGQuZ2V0VVRDTW9udGgoKSwgZC5nZXRVVENEYXRlKCkpKTtcbiAgfVxufVxuIl19