devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
282 lines (230 loc) • 8.95 kB
JavaScript
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var $ = require("../../core/renderer"),
dateSerialization = require("../../core/utils/date_serialization"),
isDate = require("../../core/utils/type").isDate,
each = require("../../core/utils/iterator").each,
dateLocalization = require("../../localization/date");
// TODO: move to dx.utils
var dateComponents = function dateComponents() {
return ["year", "day", "month", "day"];
};
var ONE_MINUTE = 1000 * 60;
var ONE_DAY = ONE_MINUTE * 60 * 24;
var ONE_YEAR = ONE_DAY * 365;
var getStringFormat = function getStringFormat(format) {
var formatType = typeof format === "undefined" ? "undefined" : _typeof(format);
if (formatType === "string") {
return "format";
}
if (formatType === "object" && format.type !== undefined) {
return format.type;
}
return null;
};
var dateUtils = {
SUPPORTED_FORMATS: ["date", "time", "datetime"],
// TODO: move to dateView
DATE_COMPONENT_TEXT_FORMATTER: function DATE_COMPONENT_TEXT_FORMATTER(value, name) {
var $container = $("<div>").addClass("dx-dateview-formatter-container");
$("<span>").text(value).addClass("dx-dateview-value-formatter").appendTo($container);
$("<span>").text(name).addClass("dx-dateview-name-formatter").appendTo($container);
return $container;
},
ONE_MINUTE: ONE_MINUTE,
ONE_DAY: ONE_DAY,
ONE_YEAR: ONE_YEAR,
MIN_DATEVIEW_DEFAULT_DATE: new Date(1900, 0, 1),
MAX_DATEVIEW_DEFAULT_DATE: function () {
var newDate = new Date();
return new Date(newDate.getFullYear() + 50, newDate.getMonth(), newDate.getDate(), 23, 59, 59);
}(),
FORMATS_INFO: {
"date": {
getStandardPattern: function getStandardPattern() {
return "yyyy-MM-dd";
},
components: dateComponents()
},
"time": {
getStandardPattern: function getStandardPattern() {
return "HH:mm";
},
components: ["hours", "minutes", "seconds", "milliseconds"]
},
"datetime": {
getStandardPattern: function getStandardPattern() {
var standardPattern;
(function androidFormatDetection() {
var androidFormatPattern = "yyyy-MM-ddTHH:mmZ",
testDateString = "2000-01-01T01:01Z";
var $input = $("<input>").attr("type", "datetime");
$input.val(testDateString);
if ($input.val()) {
standardPattern = androidFormatPattern;
}
})();
if (!standardPattern) {
standardPattern = "yyyy-MM-ddTHH:mm:ssZ";
}
dateUtils.FORMATS_INFO["datetime"].getStandardPattern = function () {
return standardPattern;
};
return standardPattern;
},
components: dateComponents().concat(["hours", "minutes", "seconds", "milliseconds"])
},
"datetime-local": {
getStandardPattern: function getStandardPattern() {
return "yyyy-MM-ddTHH:mm:ss";
},
components: dateComponents().concat(["hours", "minutes", "seconds"])
}
},
FORMATS_MAP: {
"date": "shortdate",
"time": "shorttime",
"datetime": "shortdateshorttime"
},
SUBMIT_FORMATS_MAP: {
"date": "date",
"time": "time",
"datetime": "datetime-local"
},
toStandardDateFormat: function toStandardDateFormat(date, type) {
var pattern = dateUtils.FORMATS_INFO[type].getStandardPattern();
return dateSerialization.serializeDate(date, pattern);
},
fromStandardDateFormat: function fromStandardDateFormat(text) {
var date = dateSerialization.dateParser(text);
return isDate(date) ? date : undefined;
},
getMaxMonthDay: function getMaxMonthDay(year, month) {
return new Date(year, month + 1, 0).getDate();
},
mergeDates: function mergeDates(oldValue, newValue, format) {
if (!newValue) {
return newValue || null;
}
if (!oldValue || isNaN(oldValue.getTime())) {
var now = new Date(null);
oldValue = new Date(now.getFullYear(), now.getMonth(), now.getDate());
}
var result = new Date(oldValue.valueOf());
var formatInfo = dateUtils.FORMATS_INFO[format];
each(formatInfo.components, function () {
var componentInfo = dateUtils.DATE_COMPONENTS_INFO[this];
result[componentInfo.setter](newValue[componentInfo.getter]());
});
return result;
},
getLongestCaptionIndex: function getLongestCaptionIndex(captionArray) {
var longestIndex = 0,
longestCaptionLength = 0,
i;
for (i = 0; i < captionArray.length; ++i) {
if (captionArray[i].length > longestCaptionLength) {
longestIndex = i;
longestCaptionLength = captionArray[i].length;
}
}
return longestIndex;
},
formatUsesMonthName: function formatUsesMonthName(format) {
return dateLocalization.formatUsesMonthName(format);
},
formatUsesDayName: function formatUsesDayName(format) {
return dateLocalization.formatUsesDayName(format);
},
getLongestDate: function getLongestDate(format, monthNames, dayNames) {
var stringFormat = getStringFormat(format),
month = 9;
if (!stringFormat || dateUtils.formatUsesMonthName(stringFormat)) {
month = dateUtils.getLongestCaptionIndex(monthNames);
}
var longestDate = new Date(1888, month, 21, 23, 59, 59, 999);
if (!stringFormat || dateUtils.formatUsesDayName(stringFormat)) {
var date = longestDate.getDate() - longestDate.getDay() + dateUtils.getLongestCaptionIndex(dayNames);
longestDate.setDate(date);
}
return longestDate;
},
normalizeTime: function normalizeTime(date) {
date.setSeconds(0);
date.setMilliseconds(0);
}
};
dateUtils.DATE_COMPONENTS_INFO = {
"year": {
getter: "getFullYear",
setter: "setFullYear",
formatter: function formatter(value, showNames, date) {
var formatDate = new Date(date.getTime());
formatDate.setFullYear(value);
return dateLocalization.format(formatDate, "yyyy");
},
startValue: undefined,
endValue: undefined
},
"day": {
getter: "getDate",
setter: "setDate",
formatter: function formatter(value, showNames, date) {
var formatDate = new Date(date.getTime());
formatDate.setDate(value);
if (!showNames) {
return dateLocalization.format(formatDate, "d");
}
return dateUtils.DATE_COMPONENT_TEXT_FORMATTER(value, dateLocalization.getDayNames()[formatDate.getDay()]);
},
startValue: 1,
endValue: undefined
},
"month": {
getter: "getMonth",
setter: "setMonth",
formatter: function formatter(value, showNames) {
var monthName = dateLocalization.getMonthNames()[value];
return showNames ? dateUtils.DATE_COMPONENT_TEXT_FORMATTER(value + 1, monthName) : monthName;
},
startValue: 0,
endValue: 11
},
"hours": {
getter: "getHours",
setter: "setHours",
formatter: function formatter(value) {
return dateLocalization.format(new Date(0, 0, 0, value), "hour");
},
startValue: 0,
endValue: 23
},
"minutes": {
getter: "getMinutes",
setter: "setMinutes",
formatter: function formatter(value) {
return dateLocalization.format(new Date(0, 0, 0, 0, value), "minute");
},
startValue: 0,
endValue: 59
},
"seconds": {
getter: "getSeconds",
setter: "setSeconds",
formatter: function formatter(value) {
return dateLocalization.format(new Date(0, 0, 0, 0, 0, value), "second");
},
startValue: 0,
endValue: 59
},
"milliseconds": {
getter: "getMilliseconds",
setter: "setMilliseconds",
formatter: function formatter(value) {
return dateLocalization.format(new Date(0, 0, 0, 0, 0, 0, value), "millisecond");
},
startValue: 0,
endValue: 999
}
};
module.exports = dateUtils;
;