diff options
Diffstat (limited to 'std/datetime/mod.ts')
-rw-r--r-- | std/datetime/mod.ts | 90 |
1 files changed, 12 insertions, 78 deletions
diff --git a/std/datetime/mod.ts b/std/datetime/mod.ts index fe6fe6b3c..e47fe9e01 100644 --- a/std/datetime/mod.ts +++ b/std/datetime/mod.ts @@ -1,7 +1,6 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -import { assert } from "../_util/assert.ts"; -export type DateFormat = "mm-dd-yyyy" | "dd-mm-yyyy" | "yyyy-mm-dd"; +import { DateTimeFormatter } from "./formatter.ts"; export const SECOND = 1e3; export const MINUTE = SECOND * 60; @@ -20,92 +19,27 @@ enum Day { Sat, } -function execForce(reg: RegExp, pat: string): RegExpExecArray { - const v = reg.exec(pat); - assert(v != null); - return v; -} /** * Parse date from string using format string - * @param dateStr Date string + * @param dateString Date string * @param format Format string * @return Parsed date */ -export function parseDate(dateStr: string, format: DateFormat): Date { - let m, d, y: string; - let datePattern: RegExp; - - switch (format) { - case "mm-dd-yyyy": - datePattern = /^(\d{2})-(\d{2})-(\d{4})$/; - [, m, d, y] = execForce(datePattern, dateStr); - break; - case "dd-mm-yyyy": - datePattern = /^(\d{2})-(\d{2})-(\d{4})$/; - [, d, m, y] = execForce(datePattern, dateStr); - break; - case "yyyy-mm-dd": - datePattern = /^(\d{4})-(\d{2})-(\d{2})$/; - [, y, m, d] = execForce(datePattern, dateStr); - break; - default: - throw new Error("Invalid date format!"); - } - - return new Date(Number(y), Number(m) - 1, Number(d)); +export function parse(dateString: string, formatString: string): Date { + const formatter = new DateTimeFormatter(formatString); + const parts = formatter.parseToParts(dateString); + return formatter.partsToDate(parts); } -export type DateTimeFormat = - | "mm-dd-yyyy hh:mm" - | "dd-mm-yyyy hh:mm" - | "yyyy-mm-dd hh:mm" - | "hh:mm mm-dd-yyyy" - | "hh:mm dd-mm-yyyy" - | "hh:mm yyyy-mm-dd"; - /** - * Parse date & time from string using format string - * @param dateStr Date & time string + * Format date using format string + * @param date Date * @param format Format string - * @return Parsed date + * @return formatted date string */ -export function parseDateTime( - datetimeStr: string, - format: DateTimeFormat, -): Date { - let m, d, y, ho, mi: string; - let datePattern: RegExp; - - switch (format) { - case "mm-dd-yyyy hh:mm": - datePattern = /^(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})$/; - [, m, d, y, ho, mi] = execForce(datePattern, datetimeStr); - break; - case "dd-mm-yyyy hh:mm": - datePattern = /^(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})$/; - [, d, m, y, ho, mi] = execForce(datePattern, datetimeStr); - break; - case "yyyy-mm-dd hh:mm": - datePattern = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})$/; - [, y, m, d, ho, mi] = execForce(datePattern, datetimeStr); - break; - case "hh:mm mm-dd-yyyy": - datePattern = /^(\d{2}):(\d{2}) (\d{2})-(\d{2})-(\d{4})$/; - [, ho, mi, m, d, y] = execForce(datePattern, datetimeStr); - break; - case "hh:mm dd-mm-yyyy": - datePattern = /^(\d{2}):(\d{2}) (\d{2})-(\d{2})-(\d{4})$/; - [, ho, mi, d, m, y] = execForce(datePattern, datetimeStr); - break; - case "hh:mm yyyy-mm-dd": - datePattern = /^(\d{2}):(\d{2}) (\d{4})-(\d{2})-(\d{2})$/; - [, ho, mi, y, m, d] = execForce(datePattern, datetimeStr); - break; - default: - throw new Error("Invalid datetime format!"); - } - - return new Date(Number(y), Number(m) - 1, Number(d), Number(ho), Number(mi)); +export function format(date: Date, formatString: string): string { + const formatter = new DateTimeFormatter(formatString); + return formatter.format(date); } /** |