UNPKG

date-vir

Version:

Easy and explicit dates and times.

60 lines (59 loc) 1.71 kB
import { DateTime } from 'luxon'; /** * These formats are for luxon, documented here: * https://moment.github.io/luxon/#/parsing?id=table-of-tokens */ const knownStringFormats = [ // 1-2024 'L-y', // jan-2021 'LLL-y', // january-2021 'LLLL-y', // no padding // Sat, 1 Jun 2025 6:23:21 +0000 (UTC) 'ccc, d LLL y H:mm:ss ZZZ (z)', // all padding // Sat, 01 Jun 2025 06:23:21 +0000 (UTC) 'ccc, dd LLL y HH:mm:ss ZZZ (z)', // padded day // Sat, 01 Jun 2025 6:23:21 +0000 (UTC) 'ccc, dd LLL y H:mm:ss ZZZ (z)', // padded hour // Sat, 01 Jun 2025 6:23:21 +0000 (UTC) 'ccc, d LLL y HH:mm:ss ZZZ (z)', // no padding // Sat, 1 Jun 2025 6:23:21 +0000 'ccc, d LLL y H:mm:ss ZZZ', // all padding // Sat, 01 Jun 2025 06:23:21 +0000 'ccc, dd LLL y HH:mm:ss ZZZ', // padded day // Sat, 01 Jun 2025 6:23:21 +0000 'ccc, dd LLL y H:mm:ss ZZZ', // padded hour // Sat, 01 Jun 2025 6:23:21 +0000 'ccc, d LLL y HH:mm:ss ZZZ', ]; /** * Tries extra known formats for parsing date strings, even those that browsers do not natively * support. * * @category Internal */ export function parseDateString(dateString, timezone) { const isoAttempt = DateTime.fromISO(dateString, { zone: timezone }); if (isoAttempt.isValid) { return isoAttempt; } let finalizedDateTime; knownStringFormats.some((format) => { const dateTimeAttempt = DateTime.fromFormat(dateString.trim(), format, { zone: timezone }); if (!dateTimeAttempt.isValid) { return false; } finalizedDateTime = dateTimeAttempt; return true; }); return finalizedDateTime; }