dt-format
Version:
date formatter for javascript
116 lines (115 loc) • 5.7 kB
JavaScript
"use strict";
exports.__esModule = true;
var date_time_pattern_1 = require("./date.time.pattern");
var locale_1 = require("./locale");
var DateTimeType;
(function (DateTimeType) {
DateTimeType["SHORT"] = "short";
DateTimeType["LONG"] = "long";
})(DateTimeType || (DateTimeType = {}));
var DayTimeMarker;
(function (DayTimeMarker) {
DayTimeMarker["AM"] = "AM";
DayTimeMarker["PM"] = "PM";
})(DayTimeMarker || (DayTimeMarker = {}));
var POSSIBLE_PATTERNS = [
date_time_pattern_1.DateTimePattern.FULL_DATE,
date_time_pattern_1.DateTimePattern.SHORT_DATE,
date_time_pattern_1.DateTimePattern.FULL_YEAR,
date_time_pattern_1.DateTimePattern.SHORT_YEAR,
date_time_pattern_1.DateTimePattern.FULL_MINUTE,
date_time_pattern_1.DateTimePattern.SHORT_MINUTE,
date_time_pattern_1.DateTimePattern.FULL_24_HOUR,
date_time_pattern_1.DateTimePattern.SHORT_24_HOUR,
date_time_pattern_1.DateTimePattern.FULL_HOUR,
date_time_pattern_1.DateTimePattern.SHORT_HOUR,
date_time_pattern_1.DateTimePattern.FULL_SECOND,
date_time_pattern_1.DateTimePattern.SHORT_SECOND,
date_time_pattern_1.DateTimePattern.FULL_MILLISECOND,
date_time_pattern_1.DateTimePattern.MEDIUM_MILLISECOND,
date_time_pattern_1.DateTimePattern.SHORT_MILLISECOND,
date_time_pattern_1.DateTimePattern.AM_PM_MARKER,
date_time_pattern_1.DateTimePattern.FULL_MONTH,
date_time_pattern_1.DateTimePattern.MEDIUM_MONTH,
date_time_pattern_1.DateTimePattern.SHORT_MONTH,
date_time_pattern_1.DateTimePattern.FULL_WEEK,
date_time_pattern_1.DateTimePattern.MEDIUM_WEEK,
date_time_pattern_1.DateTimePattern.SHORT_WEEK,
];
var getDayTimeMarker = function (locale, type) { return locale_1.getLocalizedTimeMarker(locale)[type]; };
var getWeek = function (week, key, locale) { return locale_1.getLocalizedWeek(locale)["" + week][key]; };
var getMonth = function (month, key, locale) { return locale_1.getLocalizedMonth(locale)["" + month][key]; };
var suffixWithZero = function (value, comparator) {
if (comparator === void 0) { comparator = 9; }
return value <= comparator ? "0" + value : "" + value;
};
var calculateIn12HourFormat = function (value) { return value > 12 ? value - 12 : value; };
var getDateValue = function (date, pattern, locale) {
switch (pattern) {
case date_time_pattern_1.DateTimePattern.SHORT_DATE:
return "" + date.getDate();
case date_time_pattern_1.DateTimePattern.FULL_DATE:
return suffixWithZero(date.getDate());
case date_time_pattern_1.DateTimePattern.SHORT_YEAR:
return ("" + date.getFullYear()).substring(2);
case date_time_pattern_1.DateTimePattern.FULL_YEAR:
return "" + date.getFullYear();
case date_time_pattern_1.DateTimePattern.SHORT_MONTH:
return suffixWithZero(date.getMonth() + 1);
case date_time_pattern_1.DateTimePattern.MEDIUM_MONTH:
return getMonth(date.getMonth(), DateTimeType.SHORT, locale);
case date_time_pattern_1.DateTimePattern.FULL_MONTH:
return getMonth(date.getMonth(), DateTimeType.LONG, locale);
case date_time_pattern_1.DateTimePattern.SHORT_WEEK:
return suffixWithZero(date.getDay());
case date_time_pattern_1.DateTimePattern.MEDIUM_WEEK:
return getWeek(date.getDay(), DateTimeType.SHORT, locale);
case date_time_pattern_1.DateTimePattern.FULL_WEEK:
return getWeek(date.getDay(), DateTimeType.LONG, locale);
case date_time_pattern_1.DateTimePattern.FULL_MINUTE:
return suffixWithZero(date.getMinutes());
case date_time_pattern_1.DateTimePattern.SHORT_MINUTE:
return date.getMinutes();
case date_time_pattern_1.DateTimePattern.SHORT_24_HOUR:
return date.getHours();
case date_time_pattern_1.DateTimePattern.FULL_24_HOUR:
return suffixWithZero(date.getHours());
case date_time_pattern_1.DateTimePattern.SHORT_HOUR:
return calculateIn12HourFormat(date.getHours());
case date_time_pattern_1.DateTimePattern.FULL_HOUR:
return suffixWithZero(calculateIn12HourFormat(date.getHours()));
case date_time_pattern_1.DateTimePattern.SHORT_SECOND:
return date.getSeconds();
case date_time_pattern_1.DateTimePattern.FULL_SECOND:
return suffixWithZero(date.getSeconds());
case date_time_pattern_1.DateTimePattern.SHORT_MILLISECOND:
return date.getMilliseconds();
case date_time_pattern_1.DateTimePattern.MEDIUM_MILLISECOND:
return suffixWithZero(date.getMilliseconds());
case date_time_pattern_1.DateTimePattern.FULL_MILLISECOND:
return suffixWithZero(date.getMilliseconds(), 99);
case date_time_pattern_1.DateTimePattern.AM_PM_MARKER:
return date.getHours() >= 12
? getDayTimeMarker(locale, DayTimeMarker.PM)
: getDayTimeMarker(locale, DayTimeMarker.AM);
default:
return '';
}
};
var DateTimeFormat = (function () {
function DateTimeFormat() {
}
DateTimeFormat.format = function (date, pattern, locale) {
if (locale === void 0) { locale = locale_1.LocaleType.en_GB; }
var value = pattern;
POSSIBLE_PATTERNS.forEach(function (possiblePattern) {
while (value.indexOf(possiblePattern) !== -1) {
var dateValue = getDateValue(date, possiblePattern, locale);
value = value.replace(possiblePattern, dateValue);
}
});
return value;
};
return DateTimeFormat;
}());
exports.DateTimeFormat = DateTimeFormat;