📄 date.js
字号:
/** * An array of textual month names. * Override these values for international dates. * Example: * <pre><code>Date.monthNames = [ 'JanInYourLang', 'FebInYourLang', ...];</code></pre> * @type Array * @static */ monthNames : [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], /** * An object hash of zero-based javascript month numbers (with short month names as keys. note: keys are case-sensitive). * Override these values for international dates. * Example: * <pre><code>Date.monthNumbers = { 'ShortJanNameInYourLang':0, 'ShortFebNameInYourLang':1, ...};</code></pre> * @type Object * @static */ monthNumbers : { Jan:0, Feb:1, Mar:2, Apr:3, May:4, Jun:5, Jul:6, Aug:7, Sep:8, Oct:9, Nov:10, Dec:11 }, /** * Get the short month name for the given month number. * Override this function for international dates. * @param {Number} month A zero-based javascript month number. * @return {String} The short month name. * @static */ getShortMonthName : function(month) { return Date.monthNames[month].substring(0, 3); }, /** * Get the short day name for the given day number. * Override this function for international dates. * @param {Number} day A zero-based javascript day number. * @return {String} The short day name. * @static */ getShortDayName : function(day) { return Date.dayNames[day].substring(0, 3); }, /** * Get the zero-based javascript month number for the given short/full month name. * Override this function for international dates. * @param {String} name The short/full month name. * @return {Number} The zero-based javascript month number. * @static */ getMonthNumber : function(name) { // handle camel casing for english month names (since the keys for the Date.monthNumbers hash are case sensitive) return Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()]; }, /** * The base format-code to formatting-function hashmap used by the {@link #format} method. * Formatting functions are strings (or functions which return strings) which * will return the appropriate value when evaluated in the context of the Date object * from which the {@link #format} method is called. * Add to / override these mappings for custom date formatting. * Note: Date.format() treats characters as literals if an appropriate mapping cannot be found. * Example: * <pre><code>Date.formatCodes.x = "String.leftPad(this.getDate(), 2, '0')";(new Date()).format("X"); // returns the current day of the month</code></pre> * @type Object * @static */ formatCodes : { d: "String.leftPad(this.getDate(), 2, '0')", D: "Date.getShortDayName(this.getDay())", // get localised short day name j: "this.getDate()", l: "Date.dayNames[this.getDay()]", N: "(this.getDay() ? this.getDay() : 7)", S: "this.getSuffix()", w: "this.getDay()", z: "this.getDayOfYear()", W: "String.leftPad(this.getWeekOfYear(), 2, '0')", F: "Date.monthNames[this.getMonth()]", m: "String.leftPad(this.getMonth() + 1, 2, '0')", M: "Date.getShortMonthName(this.getMonth())", // get localised short month name n: "(this.getMonth() + 1)", t: "this.getDaysInMonth()", L: "(this.isLeapYear() ? 1 : 0)", o: "(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))", Y: "this.getFullYear()", y: "('' + this.getFullYear()).substring(2, 4)", a: "(this.getHours() < 12 ? 'am' : 'pm')", A: "(this.getHours() < 12 ? 'AM' : 'PM')", g: "((this.getHours() % 12) ? this.getHours() % 12 : 12)", G: "this.getHours()", h: "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')", H: "String.leftPad(this.getHours(), 2, '0')", i: "String.leftPad(this.getMinutes(), 2, '0')", s: "String.leftPad(this.getSeconds(), 2, '0')", u: "String.leftPad(this.getMilliseconds(), 3, '0')", O: "this.getGMTOffset()", P: "this.getGMTOffset(true)", T: "this.getTimezone()", Z: "(this.getTimezoneOffset() * -60)", c: function() { // ISO-8601 -- GMT format for (var c = "Y-m-dTH:i:sP", code = [], i = 0, l = c.length; i < l; ++i) { var e = c.charAt(i); code.push(e == "T" ? "'T'" : Date.getFormatCode(e)); // treat T as a character literal } return code.join(" + "); }, /* c: function() { // ISO-8601 -- UTC format return [ "this.getUTCFullYear()", "'-'", "String.leftPad(this.getUTCMonth() + 1, 2, '0')", "'-'", "String.leftPad(this.getUTCDate(), 2, '0')", "'T'", "String.leftPad(this.getUTCHours(), 2, '0')", "':'", "String.leftPad(this.getUTCMinutes(), 2, '0')", "':'", "String.leftPad(this.getUTCSeconds(), 2, '0')", "'Z'" ].join(" + "); }, */ U: "Math.round(this.getTime() / 1000)" }, /** * Checks if the passed Date parameters will cause a javascript Date "rollover". * @param {Number} year 4-digit year * @param {Number} month 1-based month-of-year * @param {Number} day Day of month * @param {Number} hour (optional) Hour * @param {Number} minute (optional) Minute * @param {Number} second (optional) Second * @param {Number} millisecond (optional) Millisecond * @return {Boolean} true if the passed parameters do not cause a Date "rollover", false otherwise. * @static */ isValid : function(y, m, d, h, i, s, ms) { // setup defaults h = h || 0; i = i || 0; s = s || 0; ms = ms || 0; var dt = new Date(y, m - 1, d, h, i, s, ms); return y == dt.getFullYear() && m == dt.getMonth() + 1 && d == dt.getDate() && h == dt.getHours() && i == dt.getMinutes() && s == dt.getSeconds() && ms == dt.getMilliseconds(); }, /** * Parses the passed string using the specified date format. * Note that this function expects normal calendar dates, meaning that months are 1-based (i.e. 1 = January). * The {@link #defaults} hash will be used for any date value (i.e. year, month, day, hour, minute, second or millisecond) * which cannot be found in the passed string. If a corresponding default date value has not been specified in the {@link #defaults} hash, * the current date's year, month, day or DST-adjusted zero-hour time value will be used instead. * Keep in mind that the input date string must precisely match the specified format string * in order for the parse operation to be successful (failed parse operations return a null value). * <p>Example:</p><pre><code>//dt = Fri May 25 2007 (current date)var dt = new Date();//dt = Thu May 25 2006 (today's month/day in 2006)dt = Date.parseDate("2006", "Y");//dt = Sun Jan 15 2006 (all date parts specified)dt = Date.parseDate("2006-01-15", "Y-m-d");//dt = Sun Jan 15 2006 15:20:01dt = Date.parseDate("2006-01-15 3:20:01 PM", "Y-m-d g:i:s A");// attempt to parse Sun Feb 29 2006 03:20:01 in strict modedt = Date.parseDate("2006-02-29 03:20:01", "Y-m-d H:i:s", true); // returns null</code></pre> * @param {String} input The raw date string. * @param {String} format The expected date string format. * @param {Boolean} strict (optional) True to validate date strings while parsing (i.e. prevents javascript Date "rollover") (defaults to false). Invalid date strings will return null when parsed. * @return {Date} The parsed Date. * @static */ parseDate : function(input, format, strict) { var p = Date.parseFunctions; if (p[format] == null) { Date.createParser(format); } return p[format](input, strict === undefined ? Date.useStrict : strict); }, // private getFormatCode : function(character) { var f = Date.formatCodes[character]; if (f) { f = typeof f == 'function'? f() : f; Date.formatCodes[character] = f; // reassign function result to prevent repeated execution } // note: unknown characters are treated as literals return f || ("'" + String.escape(character) + "'"); }, // private createFormat : function(format) { var code = [], special = false, ch = ''; for (var i = 0; i < format.length; ++i) { ch = format.charAt(i); if (!special && ch == "\\") { special = true; } else if (special) { special = false; code.push("'" + String.escape(ch) + "'"); } else { code.push(Date.getFormatCode(ch)) } } Date.formatFunctions[format] = new Function("return " + code.join('+')); }, // private createParser : function() { var code = [ "var dt, y, m, d, h, i, s, ms, o, z, zz, u, v,", "def = Date.defaults,", "results = String(input).match(Date.parseRegexes[{0}]);", // either null, or an array of matched strings "if(results){", "{1}", "if(u != null){", // i.e. unix time is defined "v = new Date(u * 1000);", // give top priority to UNIX time "}else{", // create Date object representing midnight of the current day; // this will provide us with our date defaults // (note: clearTime() handles Daylight Saving Time automatically) "dt = (new Date()).clearTime();", // date calculations (note: these calculations create a dependency on Ext.num()) "y = y >= 0? y : Ext.num(def.y, dt.getFullYear());", "m = m >= 0? m : Ext.num(def.m - 1, dt.getMonth());", "d = d >= 0? d : Ext.num(def.d, dt.getDate());", // time calculations (note: these calculations create a dependency on Ext.num()) "h = h || Ext.num(def.h, dt.getHours());", "i = i || Ext.num(def.i, dt.getMinutes());", "s = s || Ext.num(def.s, dt.getSeconds());", "ms = ms || Ext.num(def.ms, dt.getMilliseconds());", "if(z >= 0 && y >= 0){", // both the year and zero-based day of year are defined and >= 0. // these 2 values alone provide sufficient info to create a full date object // create Date object representing January 1st for the given year "v = new Date(y, 0, 1, h, i, s, ms);", // then add day of year, checking for Date "rollover" if necessary "v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);", "}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){", // check for Date "rollover" "v = null;", // invalid date, so return null "}else{", // plain old Date object "v = new Date(y, m, d, h, i, s, ms);", "}", "}", "}", "if(v){", // favour UTC offset over GMT offset "if(zz != null){", // reset to UTC, then add offset "v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);", "}else if(o){", // reset to GMT, then add offset "v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));", "}", "}", "return v;" ].join('\n'); return function(format) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -