@openui5/sap.m
Version:
OpenUI5 UI Library sap.m
306 lines (276 loc) • 12.1 kB
JavaScript
/*!
* OpenUI5
* (c) Copyright 2026 SAP SE or an SAP affiliate company.
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
*/
// Provides utility class sap.m.DynamicDateUtil
sap.ui.define([
"./StandardDynamicDateOption",
"sap/base/Log",
"./library",
"sap/base/i18n/Localization",
'sap/ui/core/format/TimezoneUtil',
'sap/ui/core/date/UI5Date'
], function(
StandardDynamicDateOption, Log, library, Localization, TimezoneUtil, UI5Date) {
"use strict";
var STANDARD_KEYS_ARRAY = [
"DATE",
"TODAY",
"YESTERDAY",
"TOMORROW",
"FIRSTDAYWEEK",
"LASTDAYWEEK",
"FIRSTDAYMONTH",
"LASTDAYMONTH",
"FIRSTDAYQUARTER",
"LASTDAYQUARTER",
"FIRSTDAYYEAR",
"LASTDAYYEAR",
"DATETIMERANGE",
"FROMDATETIME",
"TODATETIME",
"DATERANGE",
"FROM",
"TO",
"YEARTODATE",
"DATETOYEAR",
"LASTMINUTES",
"LASTHOURS",
"LASTDAYS",
"LASTWEEKS",
"LASTMONTHS",
"LASTQUARTERS",
"LASTYEARS",
"NEXTMINUTES",
"NEXTHOURS",
"NEXTDAYS",
"NEXTWEEKS",
"NEXTMONTHS",
"NEXTQUARTERS",
"NEXTYEARS",
"LASTMINUTESINCLUDED",
"LASTHOURSINCLUDED",
"LASTDAYSINCLUDED",
"LASTWEEKSINCLUDED",
"LASTMONTHSINCLUDED",
"LASTQUARTERSINCLUDED",
"LASTYEARSINCLUDED",
"NEXTMINUTESINCLUDED",
"NEXTHOURSINCLUDED",
"NEXTDAYSINCLUDED",
"NEXTWEEKSINCLUDED",
"NEXTMONTHSINCLUDED",
"NEXTQUARTERSINCLUDED",
"NEXTYEARSINCLUDED",
"TODAYFROMTO",
"THISWEEK",
"LASTWEEK",
"NEXTWEEK",
"SPECIFICMONTH",
"THISMONTH",
"LASTMONTH",
"NEXTMONTH",
"THISQUARTER",
"LASTQUARTER",
"NEXTQUARTER",
"QUARTER1",
"QUARTER2",
"QUARTER3",
"QUARTER4",
"THISYEAR",
"LASTYEAR",
"NEXTYEAR"
];
/**
* The DynamicDateUtil is a utility class for working with the DynamicDateOption instances.
*
* @namespace
* @alias sap.m.DynamicDateUtil
* @protected
*/
var DynamicDateUtil = {
_options: {
"TODAY": new StandardDynamicDateOption({ key: "TODAY", valueTypes: [] }),
"YESTERDAY": new StandardDynamicDateOption({ key: "YESTERDAY", valueTypes: [] }),
"TOMORROW": new StandardDynamicDateOption({ key: "TOMORROW", valueTypes: [] }),
"FIRSTDAYWEEK": new StandardDynamicDateOption({ key: "FIRSTDAYWEEK", valueTypes: [] }),
"LASTDAYWEEK": new StandardDynamicDateOption({ key: "LASTDAYWEEK", valueTypes: [] }),
"FIRSTDAYMONTH":new StandardDynamicDateOption({ key: "FIRSTDAYMONTH", valueTypes: [] }),
"LASTDAYMONTH":new StandardDynamicDateOption({ key: "LASTDAYMONTH", valueTypes: [] }),
"FIRSTDAYQUARTER":new StandardDynamicDateOption({ key: "FIRSTDAYQUARTER", valueTypes: [] }),
"LASTDAYQUARTER":new StandardDynamicDateOption({ key: "LASTDAYQUARTER", valueTypes: [] }),
"FIRSTDAYYEAR":new StandardDynamicDateOption({ key: "FIRSTDAYYEAR", valueTypes: [] }),
"LASTDAYYEAR":new StandardDynamicDateOption({ key: "LASTDAYYEAR", valueTypes: [] }),
"THISWEEK": new StandardDynamicDateOption({ key: "THISWEEK", valueTypes: [] }),
"THISMONTH": new StandardDynamicDateOption({ key: "THISMONTH", valueTypes: [] }),
"THISQUARTER": new StandardDynamicDateOption({ key: "THISQUARTER", valueTypes: [] }),
"THISYEAR": new StandardDynamicDateOption({ key: "THISYEAR", valueTypes: [] }),
"LASTWEEK": new StandardDynamicDateOption({ key: "LASTWEEK", valueTypes: [] }),
"LASTMONTH": new StandardDynamicDateOption({ key: "LASTMONTH", valueTypes: [] }),
"LASTQUARTER": new StandardDynamicDateOption({ key: "LASTQUARTER", valueTypes: [] }),
"LASTYEAR": new StandardDynamicDateOption({ key: "LASTYEAR", valueTypes: [] }),
"NEXTWEEK": new StandardDynamicDateOption({ key: "NEXTWEEK", valueTypes: [] }),
"NEXTMONTH": new StandardDynamicDateOption({ key: "NEXTMONTH", valueTypes: [] }),
"NEXTQUARTER": new StandardDynamicDateOption({ key: "NEXTQUARTER", valueTypes: [] }),
"NEXTYEAR": new StandardDynamicDateOption({ key: "NEXTYEAR", valueTypes: [] }),
"LASTMINUTES": new StandardDynamicDateOption({ key: "LASTMINUTES", valueTypes: ["int"] }),
"LASTHOURS": new StandardDynamicDateOption({ key: "LASTHOURS", valueTypes: ["int"] }),
"LASTDAYS": new StandardDynamicDateOption({ key: "LASTDAYS", valueTypes: ["int"] }),
"LASTWEEKS": new StandardDynamicDateOption({ key: "LASTWEEKS", valueTypes: ["int"] }),
"LASTMONTHS": new StandardDynamicDateOption({ key: "LASTMONTHS", valueTypes: ["int"] }),
"LASTQUARTERS": new StandardDynamicDateOption({ key: "LASTQUARTERS", valueTypes: ["int"] }),
"LASTYEARS": new StandardDynamicDateOption({ key: "LASTYEARS", valueTypes: ["int"] }),
"NEXTMINUTES": new StandardDynamicDateOption({ key: "NEXTMINUTES", valueTypes: ["int"] }),
"NEXTHOURS": new StandardDynamicDateOption({ key: "NEXTHOURS", valueTypes: ["int"] }),
"NEXTDAYS": new StandardDynamicDateOption({ key: "NEXTDAYS", valueTypes: ["int"] }),
"NEXTWEEKS": new StandardDynamicDateOption({ key: "NEXTWEEKS", valueTypes: ["int"] }),
"NEXTMONTHS": new StandardDynamicDateOption({ key: "NEXTMONTHS", valueTypes: ["int"] }),
"NEXTQUARTERS": new StandardDynamicDateOption({ key: "NEXTQUARTERS", valueTypes: ["int"] }),
"NEXTYEARS": new StandardDynamicDateOption({ key: "NEXTYEARS", valueTypes: ["int"] }),
"LASTMINUTESINCLUDED": new StandardDynamicDateOption({ key: "LASTMINUTESINCLUDED", valueTypes: ["int", "included"] }),
"LASTHOURSINCLUDED": new StandardDynamicDateOption({ key: "LASTHOURSINCLUDED", valueTypes: ["int", "included"] }),
"LASTDAYSINCLUDED": new StandardDynamicDateOption({ key: "LASTDAYSINCLUDED", valueTypes: ["int", "included"] }),
"LASTWEEKSINCLUDED": new StandardDynamicDateOption({ key: "LASTWEEKSINCLUDED", valueTypes: ["int", "included"] }),
"LASTMONTHSINCLUDED": new StandardDynamicDateOption({ key: "LASTMONTHSINCLUDED", valueTypes: ["int", "included"] }),
"LASTQUARTERSINCLUDED": new StandardDynamicDateOption({ key: "LASTQUARTERSINCLUDED", valueTypes: ["int", "included"] }),
"LASTYEARSINCLUDED": new StandardDynamicDateOption({ key: "LASTYEARSINCLUDED", valueTypes: ["int", "included"] }),
"NEXTMINUTESINCLUDED": new StandardDynamicDateOption({ key: "NEXTMINUTESINCLUDED", valueTypes: ["int", "included"] }),
"NEXTHOURSINCLUDED": new StandardDynamicDateOption({ key: "NEXTHOURSINCLUDED", valueTypes: ["int", "included"] }),
"NEXTDAYSINCLUDED": new StandardDynamicDateOption({ key: "NEXTDAYSINCLUDED", valueTypes: ["int", "included"] }),
"NEXTWEEKSINCLUDED": new StandardDynamicDateOption({ key: "NEXTWEEKSINCLUDED", valueTypes: ["int", "included"] }),
"NEXTMONTHSINCLUDED": new StandardDynamicDateOption({ key: "NEXTMONTHSINCLUDED", valueTypes: ["int", "included"] }),
"NEXTQUARTERSINCLUDED": new StandardDynamicDateOption({ key: "NEXTQUARTERSINCLUDED", valueTypes: ["int", "included"] }),
"NEXTYEARSINCLUDED": new StandardDynamicDateOption({ key: "NEXTYEARSINCLUDED", valueTypes: ["int", "included"] }),
"FROM": new StandardDynamicDateOption({ key: "FROM", valueTypes: ["date"] }),
"TO": new StandardDynamicDateOption({ key: "TO", valueTypes: ["date"] }),
"FROMDATETIME": new StandardDynamicDateOption({ key: "FROMDATETIME", valueTypes: ["datetime"] }),
"TODATETIME": new StandardDynamicDateOption({ key: "TODATETIME", valueTypes: ["datetime"] }),
"YEARTODATE": new StandardDynamicDateOption({ key: "YEARTODATE", valueTypes: [] }),
"DATETOYEAR": new StandardDynamicDateOption({ key: "DATETOYEAR", valueTypes: [] }),
"TODAYFROMTO": new StandardDynamicDateOption({ key: "TODAYFROMTO", valueTypes: ["int", "int"] }),
"QUARTER1": new StandardDynamicDateOption({ key: "QUARTER1", valueTypes: [] }),
"QUARTER2": new StandardDynamicDateOption({ key: "QUARTER2", valueTypes: [] }),
"QUARTER3": new StandardDynamicDateOption({ key: "QUARTER3", valueTypes: [] }),
"QUARTER4": new StandardDynamicDateOption({ key: "QUARTER4", valueTypes: [] }),
"SPECIFICMONTH": new StandardDynamicDateOption({ key: "SPECIFICMONTH", valueTypes: ["int"] }),
"SPECIFICMONTHINYEAR": new StandardDynamicDateOption({ key: "SPECIFICMONTHINYEAR", valueTypes: ["int", "int"] }),
"DATERANGE": new StandardDynamicDateOption({ key: "DATERANGE", valueTypes: ["date", "date"] }),
"DATE": new StandardDynamicDateOption({ key: "DATE", valueTypes: ["date"] }),
"DATETIME": new StandardDynamicDateOption({ key: "DATETIME", valueTypes: ["datetime"] }),
"DATETIMERANGE": new StandardDynamicDateOption({ key: "DATETIMERANGE", valueTypes: ["datetime", "datetime"] })
},
_allKeys: STANDARD_KEYS_ARRAY.slice(0)
};
/**
* Adds an option to be reused as a global object.
*
* @param {sap.m.DynamicDateOption} option The option to be added
* @static
* @public
*/
DynamicDateUtil.addOption = function(option) {
if (!option || !option.getKey()) {
return;
}
var sKey = option.getKey();
DynamicDateUtil._options[sKey] = option;
if (DynamicDateUtil._allKeys.indexOf(sKey) === -1) {
DynamicDateUtil._allKeys.push(sKey);
}
};
/**
* Gets all available standard and custom dynamic date option keys.
*
* @static
* @public
* @returns {string[]} An array of all option keys
*/
DynamicDateUtil.getAllOptionKeys = function() {
return DynamicDateUtil._allKeys.slice(0);
};
/**
* Gets an option by its key.
*
* @param {string} sKey The option key
* @returns {sap.m.DynamicDateOption} The option
* @static
* @public
*/
DynamicDateUtil.getOption = function(sKey) {
return DynamicDateUtil._options[sKey];
};
/**
* Gets sorted array of all standard keys.
*
* @returns {string[]} An array of standard option keys
* @static
* @public
*/
DynamicDateUtil.getStandardKeys = function () {
return STANDARD_KEYS_ARRAY.slice(0);
};
/**
* Parses a string to an array of objects of type <code>sap.m.DynamicDateRangeValue</code>.
* Uses the provided formatter.
*
* @param {string} sValue The string to be parsed
* @param {sap.m.DynamicDateFormat} oFormatter A dynamic date formatter
* @param {string[]} aOptionKeys array of option names
* @returns {sap.m.DynamicDateRangeValue[]} An array of <code>sap.m.DynamicDateRangeValue</code> objects
* @static
* @public
*/
DynamicDateUtil.parse = function(sValue, oFormatter, aOptionKeys) {
if (typeof sValue !== 'string') {
Log.error("DynamicDateFormat can only parse a String.");
return [];
}
var aResults = [],
oResult,
aStandardDynamicDateRangeKeysArray = DynamicDateUtil.getStandardKeys();
aOptionKeys = aOptionKeys || Object.keys(DynamicDateUtil._options);
var aOptions = aOptionKeys.sort(function(sKey1, sKey2) {
return aStandardDynamicDateRangeKeysArray.indexOf(sKey1) - aStandardDynamicDateRangeKeysArray.indexOf(sKey2);
}).map(function(sKey) {
return DynamicDateUtil._options[sKey];
});
for (var i = 0; i < aOptions.length; i++) {
oResult = aOptions[i] && aOptions[i].parse(sValue.trim(), oFormatter);
if (oResult) {
oResult.operator = aOptions[i].getKey();
aResults.push(oResult);
}
}
return aResults;
};
/**
* Calculates a date range from a provided object in the format of the DynamicDateRange's value.
*
* @param {string} oValue The provided value
* @param {string} sCalendarWeekNumbering The type of calendar week numbering
* @returns {sap.ui.core.date.UniversalDate[]} An array of two date objects - start and end date
* @static
* @public
*/
DynamicDateUtil.toDates = function(oValue, sCalendarWeekNumbering) {
var sKey = oValue.operator;
return DynamicDateUtil._options[sKey].toDates(oValue, sCalendarWeekNumbering);
};
/**
* Returns a date in machine timezone setting, removing the offset added by the application configuration.
*
* @param {Date} oDate A local JS date with added offset
* @returns {Date} A local JS date with removed offset
* @static
* @public
*/
DynamicDateUtil.removeTimezoneOffset = function(oDate) {
var oNewDate = UI5Date.getInstance(oDate);
var sTimezone = Localization.getTimezone();
var iOffsetInSeconds = TimezoneUtil.calculateOffset(oNewDate, sTimezone) - oNewDate.getTimezoneOffset() * 60;
oNewDate.setSeconds(oNewDate.getSeconds() - iOffsetInSeconds);
return oNewDate;
};
return DynamicDateUtil;
}, true);