| 41 | * @returns The parsed date in the local time zone |
| 42 | */ |
| 43 | export function parseJSON<ResultDate extends Date = Date>( |
| 44 | dateStr: string, |
| 45 | options?: ParseJSONOptions<ResultDate> | undefined, |
| 46 | ): ResultDate { |
| 47 | const parts = dateStr.match( |
| 48 | /(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.(\d{0,7}))?(?:Z|(.)(\d{2}):?(\d{2})?)?/, |
| 49 | ); |
| 50 | |
| 51 | if (!parts) return toDate(NaN, options?.in); |
| 52 | |
| 53 | return toDate( |
| 54 | Date.UTC( |
| 55 | +parts[1], |
| 56 | +parts[2] - 1, |
| 57 | +parts[3], |
| 58 | +parts[4] - (+parts[9] || 0) * (parts[8] == "-" ? -1 : 1), |
| 59 | +parts[5] - (+parts[10] || 0) * (parts[8] == "-" ? -1 : 1), |
| 60 | +parts[6], |
| 61 | +((parts[7] || "0") + "00").substring(0, 3), |
| 62 | ), |
| 63 | options?.in, |
| 64 | ); |
| 65 | } |