summaryrefslogtreecommitdiff
path: root/std/datetime/mod.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/datetime/mod.ts')
-rw-r--r--std/datetime/mod.ts90
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);
}
/**