![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/html/libs/absol-full/dist/js/ |
Upload File : |
/*** module: node_modules/absol/src/Time/datetime.js ***/ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDefaultFirstDayOfWeek = getDefaultFirstDayOfWeek; exports.setDefaultFirstDayOfWeek = setDefaultFirstDayOfWeek; exports.ddmmyyyy = ddmmyyyy; exports.yyymmdd = yyymmdd; exports.formatDateString = formatDateString; exports.formartDateString = formartDateString; exports.parseDateString = parseDateString; exports.addDate = addDate; exports.prevDate = prevDate; exports.nextDate = nextDate; exports.weekIndexOf = weekIndexOf; exports.weekInYear = weekInYear; exports.beginOfSecond = beginOfSecond; exports.beginOfMinute = beginOfMinute; exports.beginOfDay = beginOfDay; exports.beginOfHour = beginOfHour; exports.beginOfWeek = beginOfWeek; exports.addWeek = addWeek; exports.nextWeek = nextWeek; exports.prevWeek = prevWeek; exports.beginOfMonth = beginOfMonth; exports.beginOfQuarter = beginOfQuarter; exports.addQuarter = addQuarter; exports.nextQuarter = nextQuarter; exports.prevQuarter = prevQuarter; exports.beginOfYear = beginOfYear; exports.addYear = addYear; exports.nextYear = nextYear; exports.prevYear = prevYear; exports.compareDate = compareDate; exports.compareMonth = compareMonth; exports.compareYear = compareYear; exports.addMonth = addMonth; exports.addMonthKeepDate = addMonthKeepDate; exports.addMonthKeepDateTime = addMonthKeepDateTime; exports.nextMonth = nextMonth; exports.prevMonth = prevMonth; exports.monthOfTwoDate = monthOfTwoDate; exports.daysInMonth = daysInMonth; exports.parseDateTime = parseDateTime; exports.formatDateTime = formatDateTime; exports.implicitDate = implicitDate; exports.formatTimeRange24 = formatTimeRange24; exports.getTimeRangeFromStep = getTimeRangeFromStep; exports.LOCAL_DATE_TIME_FORMAT = exports.LOCAL_DATE_FORMAT = exports.DATE_TIME_TOKEN_RGX = exports.formatTokenRegex = exports.shortMonthNames = exports.monthNames = exports.shortDayNames = exports.dayNames = exports.dateFormatList = exports.dateFormat2LocationList = exports.language2LocalDateFormat = exports.MILLIS_PER_MINUTE = exports.MILLIS_PER_HOUR = exports.MILLIS_PER_DAY = void 0; var _stringFormat = require("../String/stringFormat"); var _int = require("../Math/int"); var MILLIS_PER_DAY = 24 * 3600000; exports.MILLIS_PER_DAY = MILLIS_PER_DAY; var MILLIS_PER_HOUR = 3600000; exports.MILLIS_PER_HOUR = MILLIS_PER_HOUR; var MILLIS_PER_MINUTE = 60000; exports.MILLIS_PER_MINUTE = MILLIS_PER_MINUTE; var _default_first_day_of_week = 1; function getDefaultFirstDayOfWeek() { return _default_first_day_of_week; } function setDefaultFirstDayOfWeek(value) { if (isNaN(value) || !isFinite(value)) return; value = Math.floor(value) % 7; _default_first_day_of_week = value; } /** * * @param {Date} date * @returns {String} */ function ddmmyyyy(date) { return formatDateTime(date, 'dd/MM/yyyy'); } var language2LocalDateFormat = { "af-ZA": "yyyy/mm/dd", "am-ET": "d/m/yyyy", "ar-AE": "dd/mm/yyyy", "ar-BH": "dd/mm/yyyy", "ar-DZ": "dd-mm-yyyy", "ar-EG": "dd/mm/yyyy", "ar-IQ": "dd/mm/yyyy", "ar-JO": "dd/mm/yyyy", "ar-KW": "dd/mm/yyyy", "ar-LB": "dd/mm/yyyy", "ar-LY": "dd/mm/yyyy", "ar-MA": "dd-mm-yyyy", "ar-OM": "dd/mm/yyyy", "ar-QA": "dd/mm/yyyy", "ar-SA": "dd/mm/yy", "ar-SY": "dd/mm/yyyy", "ar-TN": "dd-mm-yyyy", "ar-YE": "dd/mm/yyyy", "arn-CL": "dd-mm-yyyy", "as-IN": "dd-mm-yyyy", "az-Cyrl-AZ": "dd.mm.yyyy", "az-Latn-AZ": "dd.mm.yyyy", "ba-RU": "dd.mm.yy", "be-BY": "dd.mm.yyyy", "bg-BG": "dd.m.yyyy", "bn-BD": "dd-mm-yy", "bn-IN": "dd-mm-yy", "bo-CN": "yyyy/m/d", "br-FR": "dd/mm/yyyy", "bs-Cyrl-BA": "d.m.yyyy", "bs-Latn-BA": "d.m.yyyy", "ca-ES": "dd/mm/yyyy", "co-FR": "dd/mm/yyyy", "cs-CZ": "d.m.yyyy", "cy-GB": "dd/mm/yyyy", "da-DK": "dd-mm-yyyy", "de-AT": "dd.mm.yyyy", "de-CH": "dd.mm.yyyy", "de-DE": "dd.mm.yyyy", "de-LI": "dd.mm.yyyy", "de-LU": "dd.mm.yyyy", "dsb-DE": "d. m. yyyy", "dv-MV": "dd/mm/yy", "el-GR": "d/m/yyyy", "en-029": "mm/dd/yyyy", "en-AU": "d/mm/yyyy", "en-BZ": "dd/mm/yyyy", "en-CA": "dd/mm/yyyy", "en-GB": "dd/mm/yyyy", "en-IE": "dd/mm/yyyy", "en-IN": "dd-mm-yyyy", "en-JM": "dd/mm/yyyy", "en-MY": "d/m/yyyy", "en-NZ": "d/mm/yyyy", "en-PH": "m/d/yyyy", "en-SG": "d/m/yyyy", "en-TT": "dd/mm/yyyy", "en-US": "m/d/yyyy", "en-ZA": "yyyy/mm/dd", "en-ZW": "m/d/yyyy", "es-AR": "dd/mm/yyyy", "es-BO": "dd/mm/yyyy", "es-CL": "dd-mm-yyyy", "es-CO": "dd/mm/yyyy", "es-CR": "dd/mm/yyyy", "es-DO": "dd/mm/yyyy", "es-EC": "dd/mm/yyyy", "es-ES": "dd/mm/yyyy", "es-GT": "dd/mm/yyyy", "es-HN": "dd/mm/yyyy", "es-MX": "dd/mm/yyyy", "es-NI": "dd/mm/yyyy", "es-PA": "mm/dd/yyyy", "es-PE": "dd/mm/yyyy", "es-PR": "dd/mm/yyyy", "es-PY": "dd/mm/yyyy", "es-SV": "dd/mm/yyyy", "es-US": "m/d/yyyy", "es-UY": "dd/mm/yyyy", "es-VE": "dd/mm/yyyy", "et-EE": "d.mm.yyyy", "eu-ES": "yyyy/mm/dd", "fa-IR": "mm/dd/yyyy", "fi-FI": "d.m.yyyy", "fil-PH": "m/d/yyyy", "fo-FO": "dd-mm-yyyy", "fr-BE": "d/mm/yyyy", "fr-CA": "yyyy-mm-dd", "fr-CH": "dd.mm.yyyy", "fr-FR": "dd/mm/yyyy", "fr-LU": "dd/mm/yyyy", "fr-MC": "dd/mm/yyyy", "fy-NL": "d-m-yyyy", "ga-IE": "dd/mm/yyyy", "gd-GB": "dd/mm/yyyy", "gl-ES": "dd/mm/yy", "gsw-FR": "dd/mm/yyyy", "gu-IN": "dd-mm-yy", "ha-Latn-NG": "d/m/yyyy", "he-IL": "dd/mm/yyyy", "hi-IN": "dd-mm-yyyy", "hr-BA": "d.m.yyyy.", "hr-HR": "d.m.yyyy", "hsb-DE": "d. m. yyyy", "hu-HU": "yyyy. mm. dd.", "hy-AM": "dd.mm.yyyy", "id-ID": "dd/mm/yyyy", "ig-NG": "d/m/yyyy", "ii-CN": "yyyy/m/d", "is-IS": "d.m.yyyy", "it-CH": "dd.mm.yyyy", "it-IT": "dd/mm/yyyy", "iu-Cans-CA": "d/m/yyyy", "iu-Latn-CA": "d/mm/yyyy", "ja-JP": "yyyy/mm/dd", "ka-GE": "dd.mm.yyyy", "kk-KZ": "dd.mm.yyyy", "kl-GL": "dd-mm-yyyy", "km-KH": "yyyy-mm-dd", "kn-IN": "dd-mm-yy", "ko-KR": "yyyy-mm-dd", "kok-IN": "dd-mm-yyyy", "ky-KG": "dd.mm.yy", "lb-LU": "dd/mm/yyyy", "lo-LA": "dd/mm/yyyy", "lt-LT": "yyyy.mm.dd", "lv-LV": "yyyy.mm.dd.", "mi-NZ": "dd/mm/yyyy", "mk-MK": "dd.mm.yyyy", "ml-IN": "dd-mm-yy", "mn-MN": "yy.mm.dd", "mn-Mong-CN": "yyyy/m/d", "moh-CA": "m/d/yyyy", "mr-IN": "dd-mm-yyyy", "ms-BN": "dd/mm/yyyy", "ms-MY": "dd/mm/yyyy", "mt-MT": "dd/mm/yyyy", "nb-NO": "dd.mm.yyyy", "ne-NP": "m/d/yyyy", "nl-BE": "d/mm/yyyy", "nl-NL": "d-m-yyyy", "nn-NO": "dd.mm.yyyy", "nso-ZA": "yyyy/mm/dd", "oc-FR": "dd/mm/yyyy", "or-IN": "dd-mm-yy", "pa-IN": "dd-mm-yy", "pl-PL": "yyyy-mm-dd", "prs-AF": "dd/mm/yy", "ps-AF": "dd/mm/yy", "pt-BR": "d/m/yyyy", "pt-PT": "dd-mm-yyyy", "qut-GT": "dd/mm/yyyy", "quz-BO": "dd/mm/yyyy", "quz-EC": "dd/mm/yyyy", "quz-PE": "dd/mm/yyyy", "rm-CH": "dd/mm/yyyy", "ro-RO": "dd.mm.yyyy", "ru-RU": "dd.mm.yyyy", "rw-RW": "m/d/yyyy", "sa-IN": "dd-mm-yyyy", "sah-RU": "mm.dd.yyyy", "se-FI": "d.m.yyyy", "se-NO": "dd.mm.yyyy", "se-SE": "yyyy-mm-dd", "si-LK": "yyyy-mm-dd", "sk-SK": "d. m. yyyy", "sl-SI": "d.m.yyyy", "sma-NO": "dd.mm.yyyy", "sma-SE": "yyyy-mm-dd", "smj-NO": "dd.mm.yyyy", "smj-SE": "yyyy-mm-dd", "smn-FI": "d.m.yyyy", "sms-FI": "d.m.yyyy", "sq-AL": "yyyy-mm-dd", "sr-Cyrl-BA": "d.m.yyyy", "sr-Cyrl-CS": "d.m.yyyy", "sr-Cyrl-ME": "d.m.yyyy", "sr-Cyrl-RS": "d.m.yyyy", "sr-Latn-BA": "d.m.yyyy", "sr-Latn-CS": "d.m.yyyy", "sr-Latn-ME": "d.m.yyyy", "sr-Latn-RS": "d.m.yyyy", "sv-FI": "d.m.yyyy", "sv-SE": "yyyy-mm-dd", "sw-KE": "m/d/yyyy", "syr-SY": "dd/mm/yyyy", "ta-IN": "dd-mm-yyyy", "te-IN": "dd-mm-yy", "tg-Cyrl-TJ": "dd.mm.yy", "th-TH": "d/m/yyyy", "tk-TM": "dd.mm.yy", "tn-ZA": "yyyy/mm/dd", "tr-TR": "dd.mm.yyyy", "tt-RU": "dd.mm.yyyy", "tzm-Latn-DZ": "dd-mm-yyyy", "ug-CN": "yyyy-m-d", "uk-UA": "dd.mm.yyyy", "ur-PK": "dd/mm/yyyy", "uz-Cyrl-UZ": "dd.mm.yyyy", "uz-Latn-UZ": "dd/mm yyyy", "vi-VN": "dd/mm/yyyy", "wo-SN": "dd/mm/yyyy", "xh-ZA": "yyyy/mm/dd", "yo-NG": "d/m/yyyy", "zh-CN": "yyyy/m/d", "zh-HK": "d/m/yyyy", "zh-MO": "d/m/yyyy", "zh-SG": "d/m/yyyy", "zh-TW": "yyyy/m/d", "zu-ZA": "yyyy/mm/dd" }; exports.language2LocalDateFormat = language2LocalDateFormat; var dateFormat2LocationList = Object.keys(language2LocalDateFormat).reduce(function (ac, cr) { ac[language2LocalDateFormat[cr]] = ac[language2LocalDateFormat[cr]] || []; ac[language2LocalDateFormat[cr]].push(cr); return ac; }, {}); exports.dateFormat2LocationList = dateFormat2LocationList; var dateFormatList = Object.keys(dateFormat2LocationList); /** * * @param {Date} date * @returns {String} */ exports.dateFormatList = dateFormatList; function yyymmdd(date) { return formatDateTime(date, 'yyyy/MM/dd'); } var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; exports.dayNames = dayNames; var shortDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; exports.shortDayNames = shortDayNames; var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; exports.monthNames = monthNames; var shortMonthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; exports.shortMonthNames = shortMonthNames; var formatTokenRegex = /([,.\-\/])|([a-zA-Z0-9]+)/g; //more exports.formatTokenRegex = formatTokenRegex; var DATE_TIME_TOKEN_RGX = /([^\s.\/:\-,]+)|([.\/:\-,]+)/i; /** * * @param {Date} date * @param {String=} format * @returns {String} */ exports.DATE_TIME_TOKEN_RGX = DATE_TIME_TOKEN_RGX; function formatDateString(date, format) { format = format || 'dd/mm/yyyy'; var dt = date.getDate(); var day = date.getDay(); var month = date.getMonth(); var year = date.getFullYear(); return format.replace(formatTokenRegex, function (x) { switch (x) { case "dddd": return dayNames[day]; case "ddd": return shortDayNames[day]; case "dd": return dt < 10 ? '0' + dt : '' + dt; case "d": return '' + dt; case "mmmm": return monthNames[month]; case "mmm": return shortMonthNames[month]; case "mm": return month + 1 < 10 ? '0' + (month + 1) : '' + (month + 1); case "m": return '' + (month + 1); case 'yy': return (year + '').match(/..$/)[0]; case 'yyyy': return year + ''; default: return x; } }); } var LOCAL_DATE_FORMAT = function () { var d = new Date(2021, 4, 4); var s = d.toLocaleDateString(); var fm = s.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (token) { switch (token) { case '2021': return 'yyyy'; case '5': return 'M'; case '05': return 'MM'; case '4': return 'd'; case '04': return 'dd'; default: return token; } }); return fm; }(); exports.LOCAL_DATE_FORMAT = LOCAL_DATE_FORMAT; var LOCAL_DATE_TIME_FORMAT = function () { var d = new Date(2021, 4, 4, 6, 7, 3); var s = d.toLocaleString(); var fm = s.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (token) { switch (token) { case '2021': return 'yyyy'; case '5': return 'M'; case '05': return 'MM'; case '4': return 'd'; case '04': return 'dd'; case '06': if (new Date(2021, 4, 4, 18, 7, 3).toLocaleString().indexOf(18) >= 0) return 'HH'; return 'hh'; case '6': return 'h'; case '07': return 'mm'; case '7': return 'm'; case '03': return 'ss'; case '3': return 's'; case 'AM': return 'a'; default: return token; } }); return fm; }(); exports.LOCAL_DATE_TIME_FORMAT = LOCAL_DATE_TIME_FORMAT; function formartDateString() { window.ALogger.warn("spelled incorrectly: formartDateString"); return formatDateString.apply(null, arguments); } /** * * @param {String} text * @param {String} format * @returns {Date} */ function parseDateString(text, format) { text = (0, _stringFormat.nonAccentVietnamese)(text).toLowerCase(); format = (0, _stringFormat.nonAccentVietnamese)(format).toLowerCase(); var textTokens = text.match(formatTokenRegex) || []; var formatTokens = format.match(formatTokenRegex) || []; var year = new Date().getFullYear(); var month = 0; var day = 1; var n = Math.min(textTokens.length, formatTokens.length); var textToken; var formatToken; for (var i = 0; i < n; ++i) { textToken = textTokens[i]; formatToken = formatTokens[i]; switch (formatToken) { case "dd": day = parseInt(textToken); break; case "d": day = parseInt(textToken); break; case "mmmm": month = monthNames.indexOf(textToken.substr(0, 1).toUpperCase() + textToken.substr(1).toLowerCase()); break; case "mmm": month = shortMonthNames.indexOf(textToken.substr(0, 1).toUpperCase() + textToken.substr(1).toLowerCase()); break; case "mm": case 'MM': month = parseInt(textToken) - 1; break; case "m": case 'M': month = parseInt(textToken) - 1; break; case 'yy': year = Math.floor(new Date().getFullYear() / 100) * 100 + parseInt(textToken); break; case 'yyyy': year = parseInt(textToken); break; default: if (textToken !== formatToken) throw new Error('Unexpected token ' + textToken); } } if (isNaN(year)) throw new Error('Invalid year'); if (isNaN(month) && month !== -1) { throw new Error('Invalid month'); } else { month = Math.max(0, Math.min(11, month)); } if (!isNaN(day)) { day = Math.max(1, Math.min(31, day)); if (!isNaN(month)) { day = Math.min(daysInMonth(2000, month), day); if (!isNaN(year)) day = Math.min(daysInMonth(year, month), day); } } else { throw new Error('Invalid day'); } return new Date(year, month, day); } /*** * * @param date * @param {number} delta - must be a integer * @param {boolean=} gmt * @returns {Date} */ function addDate(date, delta, gmt) { delta = Math.round(delta); var res = beginOfDay(date, gmt); if (gmt) { res.setUTCDate(date.getUTCDate() + delta); } else { res.setDate(date.getDate() + delta); } return beginOfDay(res, gmt); } /** * @param {Date} date * @param {boolean=} gmt * @return {Date} */ function prevDate(date, gmt) { return addDate(date, -1, gmt); } /** * @param {Date} date * @param {boolean=} gmt * @return {Date} */ function nextDate(date, gmt) { return addDate(date, 1, gmt); } /**** * * @param {Date} date * @param {boolean=} gmt * @param {number=} startDayOfWeek * @returns {number} */ function weekIndexOf(date, gmt, startDayOfWeek) { if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek(); var by = beginOfYear(date, gmt); var byw = beginOfWeek(by, gmt, startDayOfWeek); return Math.floor(compareDate(date, byw, gmt) / 7); } /*** * * @param {number} year * @param {number} weekIdx * @param {boolean=} gmt * @param {number=} startDayOfWeek * @returns {Date} */ function weekInYear(year, weekIdx, gmt, startDayOfWeek) { if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek(); var bg = new Date(year, 0, 1, 0, 0, 0, 0); if (gmt) bg.setUTCHours(0); var byw = beginOfWeek(bg, gmt, startDayOfWeek); if (weekIdx === 0) return bg; return new Date(byw.getTime() + weekIdx * 7 * MILLIS_PER_DAY); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at xx:xx:xx:00 */ function beginOfSecond(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCMilliseconds(0);else res.setMilliseconds(0); return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at xx:xx:00 */ function beginOfMinute(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCSeconds(0, 0);else res.setSeconds(0, 0); return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 */ function beginOfDay(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCHours(0, 0, 0, 0);else res.setHours(0, 0, 0, 0); return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at xx:00 */ function beginOfHour(date, gmt) { var res = new Date(date.getTime()); if (gmt) res.setUTCMinutes(0, 0, 0);else res.setMinutes(0, 0, 0); return res; } /** * @param {Date} date * @param {Boolean=} gmt default:false * @param {number=} startDayOfWeek default:0 * @return {Date} date at 00:00 */ function beginOfWeek(date, gmt, startDayOfWeek) { if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek(); var res = beginOfDay(date, gmt); if (isNaN(res.getTime())) return res; while ((gmt ? res.getUTCDay() : res.getDay()) !== startDayOfWeek) { res = prevDate(res, gmt); } return res; } /*** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt */ function addWeek(date, delta, gmt) { date = beginOfWeek(date, gmt); delta = Math.round(delta); return addDate(date, delta * 7, gmt); } /**** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function nextWeek(date, gmt) { return addWeek(date, 1, gmt); } /**** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function prevWeek(date, gmt) { return addWeek(date, -1, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function beginOfMonth(date, gmt) { var m = gmt ? date.getUTCMonth() : date.getMonth(); var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var res = new Date(); if (gmt) res.setUTCFullYear(y, m, 1);else res.setFullYear(y, m, 1); return beginOfDay(res, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function beginOfQuarter(date, gmt) { var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var m = gmt ? date.getUTCMonth() : date.getMonth(); m = Math.floor(m / 3) * 3; var res = new Date(); if (gmt) res.setUTCFullYear(y, m, 1);else res.setFullYear(y, m, 1); return beginOfDay(res, gmt); } /*** * * @param {Date} date * @param {number=} delta * @param {boolean=} gmt */ function addQuarter(date, delta, gmt) { delta = Math.round(delta); date = beginOfQuarter(date, gmt); return addMonth(date, delta * 3, gmt); } /*** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function nextQuarter(date, gmt) { date = beginOfQuarter(date); return nextMonth(nextMonth(nextMonth(date, gmt), gmt), gmt); } /*** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function prevQuarter(date, gmt) { date = beginOfQuarter(date, gmt); return prevMonth(prevMonth(prevMonth(date, gmt), gmt), gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function beginOfYear(date, gmt) { var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var res = new Date(); if (gmt) res.setUTCFullYear(y, 0, 1);else res.setFullYear(y, 0, 1); return beginOfDay(res, gmt); } /** * @param {Date} date * @param {number} delta * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function addYear(date, delta, gmt) { delta = Math.round(delta); var y = gmt ? date.getUTCFullYear() : date.getFullYear(); var res = new Date(); if (gmt) res.setUTCFullYear(y + delta, 0, 1);else res.setFullYear(y + delta, 0, 1); return beginOfDay(res, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function nextYear(date, gmt) { return addYear(date, 1, gmt); } /** * @param {Date} date * @param {Boolean=} gmt default:false * @return {Date} date at 00:00 AM */ function prevYear(date, gmt) { return addYear(date, -1, gmt); } /** * @param {Date} date0 * @param {Date} date1 * @param {Boolean=} gmt default:false * @return {number} */ function compareDate(date0, date1, gmt) { date0 = beginOfDay(date0, gmt); date1 = beginOfDay(date1, gmt); //Date(1975, 5, 12) has 1 hour extend return Math.floor((date0.getTime() - date1.getTime()) / 86400000); } /** * @param {Date} date0 * @param {Date} date1 * @param {Boolean=} gmt default:false * @return {number} */ function compareMonth(date0, date1, gmt) { var m0 = gmt ? date0.getUTCMonth() : date0.getMonth(); var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear(); var m1 = gmt ? date1.getUTCMonth() : date1.getMonth(); var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear(); return (y0 - y1) * 12 + (m0 - m1); } /*** * * @param {Date} date0 * @param {Date} date1 * @param {boolean=}gmt * @returns {number} */ function compareYear(date0, date1, gmt) { var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear(); var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear(); return y0 - y1; } /** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt * @returns {Date} */ function addMonth(date, delta, gmt) { var res = beginOfMonth(date, gmt); if (gmt) { res.setUTCMonth(res.getUTCMonth() + delta); } else { res.setMonth(res.getMonth() + delta); } return beginOfDay(res, gmt); } /** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt * @returns {Date} */ function addMonthKeepDate(date, delta, gmt) { var res = addMonth(date, delta, gmt); var dateNum = gmt ? date.getUTCDate() : date.getDate(); var dim = daysInMonth(gmt ? date.getUTCFullYear() : date.getFullYear(), gmt ? date.getUTCFullYear() : date.getFullYear()); dateNum = Math.min(dateNum, dim); res = addDate(res, dateNum - 1, gmt); return res; } /** * * @param {Date} date * @param {number} delta * @param {boolean=} gmt * @returns {Date} */ function addMonthKeepDateTime(date, delta, gmt) { var dayOffset = date.getTime() - beginOfDay(date, gmt).getTime(); var res = addMonthKeepDate(date, delta, gmt); res = new Date(res.getTime() + dayOffset); return res; } /** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function nextMonth(date, gmt) { return addMonth(date, 1, gmt); } /** * * @param {Date} date * @param {boolean=} gmt * @returns {Date} */ function prevMonth(date, gmt) { return addMonth(date, -1, gmt); } /** * note:argument will be converted to 00h00 * @param date0 * @param date1 */ function monthOfTwoDate(date0, date1) { date0 = beginOfDay(date0); date1 = beginOfDay(date1); var temp; var sign = 1; var res = 0; var cmdv = compareDate(date0, date1); if (cmdv > 0) { sign = -1; temp = date0; date0 = date1; date1 = temp; } else if (cmdv === 0) return 0; var d1 = date0.getDate(); var d2 = date1.getDate(); var y0 = date0.getFullYear(); var y1 = date1.getFullYear(); var m0 = date0.getMonth(); var m1 = date1.getMonth(); var nextMD0; if (d1 <= d2) { res += (y1 - y0) * 12 + (m1 - m0); res += 2 * (d2 - d1) / (daysInMonth(y0, m0) + daysInMonth(y1, m1)); } else { res += (y1 - y0) * 12 + (m1 - m0) - 1; nextMD0 = beginOfMonth(nextMonth(date0)); res += 2 * (compareDate(nextMD0, date0) + compareDate(date1, beginOfMonth(date1))) / (daysInMonth(y0, m0) + daysInMonth(y1, m1)); } return sign * res; } /** * * @param {Number} year * @param {Number} month * @returns {Number} */ function daysInMonth(year, month) { var start = new Date(year, month, 1); var end = nextMonth(start); return compareDate(end, start); } /**** * * @param text * @param format support d, M, Y, Q * @param {*=} opt * @returns {Date} */ function parseDateTime(text, format, opt) { opt = Object.assign({ startDayOfWeek: 0 }, opt); var tokenMap = {}; var txtRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'); var fmRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'); var tkMatched, fmMatched; tkMatched = txtRgx.exec(text); fmMatched = fmRgx.exec(format); var tkText, fmText; while (tkMatched && fmMatched) { tkText = tkMatched[0]; fmText = fmMatched[0]; switch (fmText) { case 'd': case 'dd': tokenMap.day = parseInt(tkText, 10); break; case 'w': case 'ww': tokenMap.week = parseInt(tkText, 10) - 1; break; case 'M': case 'MM': tokenMap.month = parseInt(tkText, 10) - 1; break; case 'y': case 'yyyy': tokenMap.year = parseInt(tkText, 10); break; case 'h': case 'hh': case 'H': case 'HH': tokenMap.hour = parseInt(tkText, 10); break; case 'm': case 'mm': tokenMap.minute = parseInt(tkText, 10); break; case 'a': if (tkText === 'AM' || tkText === 'PM') tokenMap.period = tkText;else throw new Error('Invalid period(a):' + tkText); break; case 'Q': case 'QQ': tokenMap.month = (parseInt(tkText, 10) - 1) * 3; break; default: if (tkText !== fmText) { throw new Error('Unexpected token ' + JSON.stringify(tkText) + ' at ' + tkMatched.index + ', expected ' + fmText); } } tkMatched = txtRgx.exec(text); fmMatched = fmRgx.exec(format); } if (tokenMap.period) { if (tokenMap.period === 'AM' && tokenMap.hour === 12) tokenMap.hour = 0;else if (tokenMap.period === "PM" && tokenMap.hour < 12) tokenMap.hour += 12; } var paramNames = ['year', 'month', 'day', 'hour', 'minute', 'second']; var paramShortNames = ['y', 'M', 'd', 'h', 'm', 's']; var paramDefaultValues = [new Date().getFullYear(), 0, 1, 0, 0, 0]; var resParam = paramDefaultValues.slice(); var paramList = paramNames.reduce(function (ac, cr, i) { var sN = paramShortNames[i]; if (cr in tokenMap) { ac += sN; } return ac; }, ''); var paramName; for (var i = 0; i < paramNames.length; ++i) { paramName = paramNames[i]; resParam[i] = tokenMap[paramName] === undefined ? paramDefaultValues[i] : tokenMap[paramName]; } var weekDate; if ('week' in tokenMap && !isNaN(tokenMap.week)) { weekDate = weekInYear(resParam[0], tokenMap.week, false, opt.startDayOfWeek); resParam[1] = weekDate.getMonth(); resParam[2] = weekDate.getDate(); } switch (paramList) { case 'hm': resParam.splice(1, 2, new Date().getMonth(), new Date().getDate()); break; } return new Date(resParam[0], resParam[1], resParam[2], resParam[3], resParam[4], resParam[5]); } /*** * * @param {Date} date * @param {string} format * @param {*=} opt * @return {string} */ function formatDateTime(date, format, opt) { opt = Object.assign({ startDayOfWeek: 0 }, opt); var fmRgx = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'); return format.replace(fmRgx, function (s) { var res = s; switch (s) { case 'd': case 'dd': res = (0, _int.integerZeroPadding)(date.getDate(), s.length); break; case 'w': case 'ww': res = (0, _int.integerZeroPadding)(weekIndexOf(date, false, opt.startDayOfWeek || getDefaultFirstDayOfWeek()) + 1, s.length); break; case 'M': case 'MM': res = (0, _int.integerZeroPadding)(date.getMonth() + 1, s.length); break; case 'MMM': res = shortMonthNames[date.getMonth()]; break; case 'MMMM': res = monthNames[date.getMonth()]; break; case 'y': case 'yyyy': res = (0, _int.integerZeroPadding)(date.getFullYear(), s.length); break; case 'yy': res = (0, _int.integerZeroPadding)(date.getFullYear() % 100, s.length); break; case 'a': res = date.getHours() < 12 ? "AM" : "PM"; break; case "H": case 'HH': res = (0, _int.integerZeroPadding)(date.getHours(), s.length); break; case 'h': case 'hh': res = (0, _int.integerZeroPadding)(1 + (date.getHours() - 1) % 12, s.length); break; case 'm': case 'mm': res = (0, _int.integerZeroPadding)(date.getMinutes(), s.length); break; case 's': case 'ss': res = (0, _int.integerZeroPadding)(date.getSeconds(), s.length); break; case 'Q': case 'QQ': res = (0, _int.integerZeroPadding)(Math.floor(date.getMonth() / 3) + 1, s.length); break; } return res; }); } var number = [/[+-]?\d+$/, matched => new Date(parseInt(matched[0]))]; var reISO = [/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/, matched => new Date(matched[0])]; var reMsAjax = [/^\/Date\((d|-|.*)\)[\/|\\]$/, matched => new Date(parseInt(matched[1]))]; var reString = [/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+([a-zA-Z]{3})\s+[\d\s:]+GMT[\d+]+\s*\([^)]+\)$/, matched => new Date(matched[0])]; function implicitDate(o) { var res = null; if (o instanceof Date) { res = new Date(o.getTime()); } else if (typeof o === "number") { res = new Date(o); } else if (typeof o === 'string') { [reString, reISO, reMsAjax, number].some(rule => { var matched = o.match(rule[0]); if (matched) { res = rule[1](matched); return true; } return false; }); } if (res && isNaN(res.getTime())) res = null; return res; } /*** * * @param {null|{dayOffset?: number, duration?: number}}range * @param opt */ function formatTimeRange24(range, opt) { opt = Object.assign({ nextDayText: !window.systemconfig || typeof window.systemconfig.language !== "string" || window.systemconfig.language.toLowerCase().indexOf('vn') >= 0 || window.systemconfig.language.toLowerCase().indexOf('vi') >= 0 ? 'Hôm sau' : 'Next day' }, opt || {}); range = range || {}; var m0 = Math.floor(range.dayOffset / MILLIS_PER_MINUTE); var h0 = Math.floor(m0 / 60); var d0 = Math.floor(h0 / 24); m0 = m0 % 60; h0 = h0 % 24; var endOffset = range.dayOffset + range.duration; var m1 = Math.floor(endOffset / MILLIS_PER_MINUTE); var h1 = Math.floor(m1 / 60); var d1 = Math.floor(h1 / 24); m1 = m1 % 60; h1 = h1 % 24; var res = h0 + ':' + (0, _int.integerZeroPadding)(m0, 2) + ' - ' + h1 + ':' + (0, _int.integerZeroPadding)(m1, 2); if (d0 !== d1) res += ' (' + opt.nextDayText + ')'; return res; } /** * * @param {Date} date * @param type * @param {number} n * @returns {{expireddate: Date, startdate: Date}} */ function getTimeRangeFromStep(date, type, n) { var startDate, expiredDate; var initHandlers = { month: x => beginOfMonth(x), quarter: x => beginOfQuarter(x), year: x => beginOfYear(x) }; var addHandlers = { month: (x, d) => addMonth(x, d), quarter: (x, d) => addQuarter(x, d), year: (x, d) => addYear(x, d) }; startDate = initHandlers[type](addHandlers[type](date, n)); expiredDate = addHandlers[type](startDate, 1); return { startdate: startDate, expireddate: expiredDate }; }