UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

188 lines (161 loc) • 5.66 kB
"use strict"; var dependencyInjector = require("../core/utils/dependency_injector"), isString = require("../core/utils/type").isString, iteratorUtils = require("../core/utils/iterator"), inArray = require("../core/utils/array").inArray, getLDMLDateFormatter = require("./ldml/date.formatter").getFormatter, getLDMLDateFormat = require("./ldml/date.format").getFormat, getLDMLDateParser = require("./ldml/date.parser").getParser, defaultDateNames = require("./default_date_names"), numberLocalization = require("./number"), errors = require("../core/errors"); require("./core"); var FORMATS_TO_PATTERN_MAP = { "shortdate": "M/d/y", "shorttime": "h:mm a", "longdate": "EEEE, MMMM d, y", "longtime": "h:mm:ss a", "monthandday": "MMMM d", "monthandyear": "MMMM y", "quarterandyear": "QQQ y", "day": "d", "year": "y", "shortdateshorttime": "M/d/y, h:mm a", "mediumdatemediumtime": "MMMM d, h:mm a", "longdatelongtime": "EEEE, MMMM d, y, h:mm:ss a", "month": "LLLL", "shortyear": "yy", "dayofweek": "EEEE", "quarter": "QQQ", "hour": "HH", "minute": "mm", "second": "ss", "millisecond": "SSS", "datetime-local": "yyyy-MM-ddTHH':'mm':'ss" }; var possiblePartPatterns = { year: ["y", "yy", "yyyy"], day: ["d", "dd"], month: ["M", "MM", "MMM", "MMMM"], hours: ["H", "HH", "h", "hh", "ah"], minutes: ["m", "mm"], seconds: ["s", "ss"], milliseconds: ["S", "SS", "SSS"] }; var dateLocalization = dependencyInjector({ _getPatternByFormat: function _getPatternByFormat(format) { return FORMATS_TO_PATTERN_MAP[format.toLowerCase()]; }, _expandPattern: function _expandPattern(pattern) { return this._getPatternByFormat(pattern) || pattern; }, formatUsesMonthName: function formatUsesMonthName(format) { return this._expandPattern(format).indexOf("MMMM") !== -1; }, formatUsesDayName: function formatUsesDayName(format) { return this._expandPattern(format).indexOf("EEEE") !== -1; }, getFormatParts: function getFormatParts(format) { var pattern = this._getPatternByFormat(format) || format, result = []; iteratorUtils.each(pattern.split(/\W+/), function (_, formatPart) { iteratorUtils.each(possiblePartPatterns, function (partName, possiblePatterns) { if (inArray(formatPart, possiblePatterns) > -1) { result.push(partName); } }); }); return result; }, getMonthNames: function getMonthNames(format) { return defaultDateNames.getMonthNames(format); }, getDayNames: function getDayNames(format) { return defaultDateNames.getDayNames(format); }, getQuarterNames: function getQuarterNames(format) { return defaultDateNames.getQuarterNames(format); }, getPeriodNames: function getPeriodNames(format) { return defaultDateNames.getPeriodNames(format); }, getTimeSeparator: function getTimeSeparator() { return ":"; }, is24HourFormat: function is24HourFormat(format) { var amTime = new Date(2017, 0, 20, 11, 0, 0, 0), pmTime = new Date(2017, 0, 20, 23, 0, 0, 0), amTimeFormatted = this.format(amTime, format), pmTimeFormatted = this.format(pmTime, format); for (var i = 0; i < amTimeFormatted.length; i++) { if (amTimeFormatted[i] !== pmTimeFormatted[i]) { return !isNaN(parseInt(amTimeFormatted[i])); } } }, format: function format(date, _format) { if (!date) { return; } if (!_format) { return date; } var formatter; if (typeof _format === "function") { formatter = _format; } else if (_format.formatter) { formatter = _format.formatter; } else { _format = _format.type || _format; if (isString(_format)) { _format = FORMATS_TO_PATTERN_MAP[_format.toLowerCase()] || _format; return numberLocalization.convertDigits(getLDMLDateFormatter(_format, this)(date)); } } if (!formatter) { // TODO: log warning or error return; } return formatter(date); }, parse: function parse(text, format) { var that = this, result, ldmlFormat, formatter; if (!text) { return; } if (!format) { return new Date(text); } if (format.parser) { return format.parser(text); } if (typeof format === "string" && !FORMATS_TO_PATTERN_MAP[format.toLowerCase()]) { ldmlFormat = format; } else { formatter = function formatter(value) { var text = that.format(value, format); return numberLocalization.convertDigits(text, true); }; try { ldmlFormat = getLDMLDateFormat(formatter); } catch (e) {} } if (ldmlFormat) { text = numberLocalization.convertDigits(text, true); return getLDMLDateParser(ldmlFormat, this)(text); } errors.log("W0012"); result = new Date(text); if (!result || isNaN(result.getTime())) { return; } return result; }, firstDayOfWeekIndex: function firstDayOfWeekIndex() { return 0; } }); module.exports = dateLocalization;