devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
188 lines (161 loc) • 5.66 kB
JavaScript
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;
;