devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
763 lines (762 loc) • 32.2 kB
JavaScript
/**
* DevExtreme (localization/globalize/date.js)
* Version: 18.2.18
* Build date: Tue Oct 18 2022
*
* Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
"use strict";
require("./core");
require("./number");
require("globalize/date");
var timeData = {
supplemental: {
version: {
_cldrVersion: "28",
_unicodeVersion: "8.0.0",
_number: "$Revision: 11969 $"
},
timeData: {
"001": {
_allowed: "H h",
_preferred: "H"
},
DE: {
_allowed: "H",
_preferred: "H"
},
JP: {
_allowed: "H K h",
_preferred: "H"
},
RU: {
_allowed: "H",
_preferred: "H"
},
US: {
_allowed: "H h",
_preferred: "h"
}
}
}
};
var enCaGregorian = {
main: {
en: {
identity: {
version: {
_cldrVersion: "28",
_number: "$Revision: 11972 $"
},
language: "en"
},
dates: {
calendars: {
gregorian: {
months: {
format: {
abbreviated: {
1: "Jan",
2: "Feb",
3: "Mar",
4: "Apr",
5: "May",
6: "Jun",
7: "Jul",
8: "Aug",
9: "Sep",
10: "Oct",
11: "Nov",
12: "Dec"
},
narrow: {
1: "J",
2: "F",
3: "M",
4: "A",
5: "M",
6: "J",
7: "J",
8: "A",
9: "S",
10: "O",
11: "N",
12: "D"
},
wide: {
1: "January",
2: "February",
3: "March",
4: "April",
5: "May",
6: "June",
7: "July",
8: "August",
9: "September",
10: "October",
11: "November",
12: "December"
}
},
"stand-alone": {
abbreviated: {
1: "Jan",
2: "Feb",
3: "Mar",
4: "Apr",
5: "May",
6: "Jun",
7: "Jul",
8: "Aug",
9: "Sep",
10: "Oct",
11: "Nov",
12: "Dec"
},
narrow: {
1: "J",
2: "F",
3: "M",
4: "A",
5: "M",
6: "J",
7: "J",
8: "A",
9: "S",
10: "O",
11: "N",
12: "D"
},
wide: {
1: "January",
2: "February",
3: "March",
4: "April",
5: "May",
6: "June",
7: "July",
8: "August",
9: "September",
10: "October",
11: "November",
12: "December"
}
}
},
days: {
format: {
abbreviated: {
sun: "Sun",
mon: "Mon",
tue: "Tue",
wed: "Wed",
thu: "Thu",
fri: "Fri",
sat: "Sat"
},
narrow: {
sun: "S",
mon: "M",
tue: "T",
wed: "W",
thu: "T",
fri: "F",
sat: "S"
},
"short": {
sun: "Su",
mon: "Mo",
tue: "Tu",
wed: "We",
thu: "Th",
fri: "Fr",
sat: "Sa"
},
wide: {
sun: "Sunday",
mon: "Monday",
tue: "Tuesday",
wed: "Wednesday",
thu: "Thursday",
fri: "Friday",
sat: "Saturday"
}
},
"stand-alone": {
abbreviated: {
sun: "Sun",
mon: "Mon",
tue: "Tue",
wed: "Wed",
thu: "Thu",
fri: "Fri",
sat: "Sat"
},
narrow: {
sun: "S",
mon: "M",
tue: "T",
wed: "W",
thu: "T",
fri: "F",
sat: "S"
},
"short": {
sun: "Su",
mon: "Mo",
tue: "Tu",
wed: "We",
thu: "Th",
fri: "Fr",
sat: "Sa"
},
wide: {
sun: "Sunday",
mon: "Monday",
tue: "Tuesday",
wed: "Wednesday",
thu: "Thursday",
fri: "Friday",
sat: "Saturday"
}
}
},
quarters: {
format: {
abbreviated: {
1: "Q1",
2: "Q2",
3: "Q3",
4: "Q4"
},
narrow: {
1: "1",
2: "2",
3: "3",
4: "4"
},
wide: {
1: "1st quarter",
2: "2nd quarter",
3: "3rd quarter",
4: "4th quarter"
}
},
"stand-alone": {
abbreviated: {
1: "Q1",
2: "Q2",
3: "Q3",
4: "Q4"
},
narrow: {
1: "1",
2: "2",
3: "3",
4: "4"
},
wide: {
1: "1st quarter",
2: "2nd quarter",
3: "3rd quarter",
4: "4th quarter"
}
}
},
dayPeriods: {
format: {
abbreviated: {
midnight: "midnight",
am: "AM",
"am-alt-variant": "am",
noon: "noon",
pm: "PM",
"pm-alt-variant": "pm",
morning1: "in the morning",
afternoon1: "in the afternoon",
evening1: "in the evening",
night1: "at night"
},
narrow: {
midnight: "mi",
am: "a",
"am-alt-variant": "am",
noon: "n",
pm: "p",
"pm-alt-variant": "pm",
morning1: "in the morning",
afternoon1: "in the afternoon",
evening1: "in the evening",
night1: "at night"
},
wide: {
midnight: "midnight",
am: "AM",
"am-alt-variant": "am",
noon: "noon",
pm: "PM",
"pm-alt-variant": "pm",
morning1: "in the morning",
afternoon1: "in the afternoon",
evening1: "in the evening",
night1: "at night"
}
},
"stand-alone": {
abbreviated: {
midnight: "midnight",
am: "AM",
"am-alt-variant": "am",
noon: "noon",
pm: "PM",
"pm-alt-variant": "pm",
morning1: "in the morning",
afternoon1: "in the afternoon",
evening1: "in the evening",
night1: "at night"
},
narrow: {
midnight: "midnight",
am: "AM",
"am-alt-variant": "am",
noon: "noon",
pm: "PM",
"pm-alt-variant": "pm",
morning1: "in the morning",
afternoon1: "in the afternoon",
evening1: "in the evening",
night1: "at night"
},
wide: {
midnight: "midnight",
am: "AM",
"am-alt-variant": "am",
noon: "noon",
pm: "PM",
"pm-alt-variant": "pm",
morning1: "morning",
afternoon1: "afternoon",
evening1: "evening",
night1: "night"
}
}
},
eras: {
eraNames: {
0: "Before Christ",
"0-alt-variant": "Before Common Era",
1: "Anno Domini",
"1-alt-variant": "Common Era"
},
eraAbbr: {
0: "BC",
"0-alt-variant": "BCE",
1: "AD",
"1-alt-variant": "CE"
},
eraNarrow: {
0: "B",
"0-alt-variant": "BCE",
1: "A",
"1-alt-variant": "CE"
}
},
dateFormats: {
full: "EEEE, MMMM d, y",
"long": "MMMM d, y",
medium: "MMM d, y",
"short": "M/d/yy"
},
timeFormats: {
full: "h:mm:ss a zzzz",
"long": "h:mm:ss a z",
medium: "h:mm:ss a",
"short": "h:mm a"
},
dateTimeFormats: {
full: "{1} 'at' {0}",
"long": "{1} 'at' {0}",
medium: "{1}, {0}",
"short": "{1}, {0}",
availableFormats: {
d: "d",
E: "ccc",
Ed: "d E",
Ehm: "E h:mm a",
EHm: "E HH:mm",
Ehms: "E h:mm:ss a",
EHms: "E HH:mm:ss",
Gy: "y G",
GyMMM: "MMM y G",
GyMMMd: "MMM d, y G",
GyMMMEd: "E, MMM d, y G",
h: "h a",
H: "HH",
hm: "h:mm a",
Hm: "HH:mm",
hms: "h:mm:ss a",
Hms: "HH:mm:ss",
hmsv: "h:mm:ss a v",
Hmsv: "HH:mm:ss v",
hmv: "h:mm a v",
Hmv: "HH:mm v",
M: "L",
Md: "M/d",
MEd: "E, M/d",
MMM: "LLL",
MMMd: "MMM d",
MMMEd: "E, MMM d",
MMMMd: "MMMM d",
ms: "mm:ss",
y: "y",
yM: "M/y",
yMd: "M/d/y",
yMEd: "E, M/d/y",
yMMM: "MMM y",
yMMMd: "MMM d, y",
yMMMEd: "E, MMM d, y",
yMMMM: "MMMM y",
yQQQ: "QQQ y",
yQQQQ: "QQQQ y"
},
appendItems: {
Day: "{0} ({2}: {1})",
"Day-Of-Week": "{0} {1}",
Era: "{0} {1}",
Hour: "{0} ({2}: {1})",
Minute: "{0} ({2}: {1})",
Month: "{0} ({2}: {1})",
Quarter: "{0} ({2}: {1})",
Second: "{0} ({2}: {1})",
Timezone: "{0} {1}",
Week: "{0} ({2}: {1})",
Year: "{0} {1}"
},
intervalFormats: {
intervalFormatFallback: "{0} \u2013 {1}",
d: {
d: "d \u2013 d"
},
h: {
a: "h a \u2013 h a",
h: "h \u2013 h a"
},
H: {
H: "HH \u2013 HH"
},
hm: {
a: "h:mm a \u2013 h:mm a",
h: "h:mm \u2013 h:mm a",
m: "h:mm \u2013 h:mm a"
},
Hm: {
H: "HH:mm \u2013 HH:mm",
m: "HH:mm \u2013 HH:mm"
},
hmv: {
a: "h:mm a \u2013 h:mm a v",
h: "h:mm \u2013 h:mm a v",
m: "h:mm \u2013 h:mm a v"
},
Hmv: {
H: "HH:mm \u2013 HH:mm v",
m: "HH:mm \u2013 HH:mm v"
},
hv: {
a: "h a \u2013 h a v",
h: "h \u2013 h a v"
},
Hv: {
H: "HH \u2013 HH v"
},
M: {
M: "M \u2013 M"
},
Md: {
d: "M/d \u2013 M/d",
M: "M/d \u2013 M/d"
},
MEd: {
d: "E, M/d \u2013 E, M/d",
M: "E, M/d \u2013 E, M/d"
},
MMM: {
M: "MMM \u2013 MMM"
},
MMMd: {
d: "MMM d \u2013 d",
M: "MMM d \u2013 MMM d"
},
MMMEd: {
d: "E, MMM d \u2013 E, MMM d",
M: "E, MMM d \u2013 E, MMM d"
},
y: {
y: "y \u2013 y"
},
yM: {
M: "M/y \u2013 M/y",
y: "M/y \u2013 M/y"
},
yMd: {
d: "M/d/y \u2013 M/d/y",
M: "M/d/y \u2013 M/d/y",
y: "M/d/y \u2013 M/d/y"
},
yMEd: {
d: "E, M/d/y \u2013 E, M/d/y",
M: "E, M/d/y \u2013 E, M/d/y",
y: "E, M/d/y \u2013 E, M/d/y"
},
yMMM: {
M: "MMM \u2013 MMM y",
y: "MMM y \u2013 MMM y"
},
yMMMd: {
d: "MMM d \u2013 d, y",
M: "MMM d \u2013 MMM d, y",
y: "MMM d, y \u2013 MMM d, y"
},
yMMMEd: {
d: "E, MMM d \u2013 E, MMM d, y",
M: "E, MMM d \u2013 E, MMM d, y",
y: "E, MMM d, y \u2013 E, MMM d, y"
},
yMMMM: {
M: "MMMM \u2013 MMMM y",
y: "MMMM y \u2013 MMMM y"
}
}
}
}
}
}
}
}
};
var weekData = {
supplemental: {
version: {
_cldrVersion: "28",
_unicodeVersion: "8.0.0",
_number: "$Revision: 11969 $"
},
weekData: {
minDays: {
"001": "1",
US: "1",
DE: "4"
},
firstDay: {
"001": "mon",
DE: "mon",
RU: "mon",
JP: "sun",
US: "sun"
},
weekendStart: {
"001": "sat"
},
weekendEnd: {
"001": "sun"
}
}
}
};
var ACCEPTABLE_JSON_FORMAT_PROPERTIES = ["skeleton", "date", "time", "datetime", "raw"];
var Globalize = require("globalize"),
dateLocalization = require("../date"),
isObject = require("../../core/utils/type").isObject,
inArray = require("../../core/utils/array").inArray,
iteratorUtils = require("../../core/utils/iterator");
if (Globalize && Globalize.formatDate) {
if ("en" === Globalize.locale().locale) {
Globalize.load(weekData, timeData, enCaGregorian);
Globalize.locale("en")
}
var formattersCache = {};
var FORMATS_TO_GLOBALIZE_MAP = {
shortdate: {
path: "dateTimeFormats/availableFormats/yMd"
},
shorttime: {
path: "timeFormats/short"
},
longdate: {
path: "dateFormats/full"
},
longtime: {
path: "timeFormats/medium"
},
monthandday: {
path: "dateTimeFormats/availableFormats/MMMMd"
},
monthandyear: {
path: "dateTimeFormats/availableFormats/yMMMM"
},
quarterandyear: {
path: "dateTimeFormats/availableFormats/yQQQ"
},
day: {
path: "dateTimeFormats/availableFormats/d"
},
year: {
path: "dateTimeFormats/availableFormats/y"
},
shortdateshorttime: {
path: "dateTimeFormats/short",
parts: ["shorttime", "shortdate"]
},
mediumdatemediumtime: {
path: "dateTimeFormats/medium",
parts: ["shorttime", "monthandday"]
},
longdatelongtime: {
path: "dateTimeFormats/medium",
parts: ["longtime", "longdate"]
},
month: {
pattern: "LLLL"
},
shortyear: {
pattern: "yy"
},
dayofweek: {
pattern: "EEEE"
},
quarter: {
pattern: "QQQ"
},
millisecond: {
pattern: "SSS"
},
hour: {
pattern: "HH"
},
minute: {
pattern: "mm"
},
second: {
pattern: "ss"
}
};
var globalizeDateLocalization = {
_getPatternByFormat: function(format) {
var that = this,
lowerFormat = format.toLowerCase(),
globalizeFormat = FORMATS_TO_GLOBALIZE_MAP[lowerFormat];
if ("datetime-local" === lowerFormat) {
return "yyyy-MM-ddTHH':'mm':'ss"
}
if (!globalizeFormat) {
return
}
var result = globalizeFormat.path && that._getFormatStringByPath(globalizeFormat.path) || globalizeFormat.pattern;
if (globalizeFormat.parts) {
iteratorUtils.each(globalizeFormat.parts, function(index, part) {
result = result.replace("{" + index + "}", that._getPatternByFormat(part))
})
}
return result
},
_getFormatStringByPath: function(path) {
return Globalize.locale().main("dates/calendars/gregorian/" + path)
},
getPeriodNames: function() {
var json = Globalize.locale().main("dates/calendars/gregorian/dayPeriods/stand-alone/wide");
return [json.am, json.pm]
},
getMonthNames: function(format, type) {
var months = Globalize.locale().main("dates/calendars/gregorian/months/" + (type || "stand-alone") + "/" + (format || "wide"));
return iteratorUtils.map(months, function(month) {
return month
})
},
getDayNames: function(format) {
var days = Globalize.locale().main("dates/calendars/gregorian/days/stand-alone/" + (format || "wide"));
return iteratorUtils.map(days, function(day) {
return day
})
},
getTimeSeparator: function() {
return Globalize.locale().main("numbers/symbols-numberSystem-latn/timeSeparator")
},
format: function(date, _format) {
if (!date) {
return
}
if (!_format) {
return date
}
var formatter, formatCacheKey;
if ("function" === typeof _format) {
return _format(date)
}
if (_format.formatter) {
return _format.formatter(date)
}
_format = _format.type || _format;
if ("string" === typeof _format) {
formatCacheKey = Globalize.locale().locale + ":" + _format;
formatter = formattersCache[formatCacheKey];
if (!formatter) {
_format = {
raw: this._getPatternByFormat(_format) || _format
};
formatter = formattersCache[formatCacheKey] = Globalize.dateFormatter(_format)
}
} else {
if (!this._isAcceptableFormat(_format)) {
return
}
formatter = Globalize.dateFormatter(_format)
}
return formatter(date)
},
parse: function(text, format) {
if (!text) {
return
}
if (!format || "function" === typeof format || isObject(format) && !this._isAcceptableFormat(format)) {
if (format) {
var parsedValue = this.callBase(text, format);
if (parsedValue) {
return parsedValue
}
}
return Globalize.parseDate(text)
}
if (format.parser) {
return format.parser(text)
}
if ("string" === typeof format) {
format = {
raw: this._getPatternByFormat(format) || format
}
}
return Globalize.parseDate(text, format)
},
_isAcceptableFormat: function(format) {
if (format.parser) {
return true
}
for (var i = 0; i < ACCEPTABLE_JSON_FORMAT_PROPERTIES.length; i++) {
if (format.hasOwnProperty(ACCEPTABLE_JSON_FORMAT_PROPERTIES[i])) {
return true
}
}
},
firstDayOfWeekIndex: function() {
var firstDay = Globalize.locale().supplemental.weekData.firstDay();
return inArray(firstDay, this._getDayKeys())
},
_getDayKeys: function() {
var days = Globalize.locale().main("dates/calendars/gregorian/days/format/short");
return iteratorUtils.map(days, function(day, key) {
return key
})
}
};
dateLocalization.inject(globalizeDateLocalization)
}