|
@@ -0,0 +1,49 @@
|
|
|
|
|
+import { DateEnv, DateInput } from './datelib/env'
|
|
|
|
|
+import { assignTo } from './util/object'
|
|
|
|
|
+import { createFormatter } from './datelib/formatting'
|
|
|
|
|
+import { getLocale } from './datelib/locale';
|
|
|
|
|
+
|
|
|
|
|
+export function formatDate(dateInput: DateInput, settings = {}) {
|
|
|
|
|
+ let dateEnv = buildDateEnv(settings)
|
|
|
|
|
+ let formatter = createFormatter(settings)
|
|
|
|
|
+ let dateMeta = dateEnv.createMarkerMeta(dateInput)
|
|
|
|
|
+
|
|
|
|
|
+ if (!dateMeta) { // TODO: warning?
|
|
|
|
|
+ return ''
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return dateEnv.format(dateMeta.marker, formatter, {
|
|
|
|
|
+ forcedTzo: dateMeta.forcedTzo
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export function formatRange(startInput: DateInput, endInput: DateInput, settings = {}) {
|
|
|
|
|
+ let dateEnv = buildDateEnv(settings)
|
|
|
|
|
+ let formatter = createFormatter(settings)
|
|
|
|
|
+ let startMeta = dateEnv.createMarkerMeta(startInput)
|
|
|
|
|
+ let endMeta = dateEnv.createMarkerMeta(endInput)
|
|
|
|
|
+
|
|
|
|
|
+ if (!startMeta || !endMeta) { // TODO: warning?
|
|
|
|
|
+ return ''
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {
|
|
|
|
|
+ forcedStartTzo: startMeta.forcedTzo,
|
|
|
|
|
+ forcedEndTzo: endMeta.forcedTzo
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function buildDateEnv(settings) {
|
|
|
|
|
+ let locale = settings.locale || 'en'
|
|
|
|
|
+
|
|
|
|
|
+ // ensure required settings
|
|
|
|
|
+ // TODO: use constants
|
|
|
|
|
+ settings = assignTo({
|
|
|
|
|
+ timeZone: 'UTC',
|
|
|
|
|
+ calendarSystem: 'gregory'
|
|
|
|
|
+ }, settings, {
|
|
|
|
|
+ locale: getLocale(locale)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ return new DateEnv(settings)
|
|
|
|
|
+}
|