📄 date.js
字号:
/*
* Ext JS Library 2.3.0
* Copyright(c) 2006-2009, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
/** * @class Date * * The date parsing and formatting syntax contains a subset of * <a href="http://www.php.net/date">PHP's date() function</a>, and the formats that are * supported will provide results equivalent to their PHP versions. * * The following is a list of all currently supported formats: * <pre>Format Description Example returned values------ ----------------------------------------------------------------------- ----------------------- d Day of the month, 2 digits with leading zeros 01 to 31 D A short textual representation of the day of the week Mon to Sun j Day of the month without leading zeros 1 to 31 l A full textual representation of the day of the week Sunday to Saturday N ISO-8601 numeric representation of the day of the week 1 (for Monday) through 7 (for Sunday) S English ordinal suffix for the day of the month, 2 characters st, nd, rd or th. Works well with j w Numeric representation of the day of the week 0 (for Sunday) to 6 (for Saturday) z The day of the year (starting from 0) 0 to 364 (365 in leap years) W ISO-8601 week number of year, weeks starting on Monday 01 to 53 F A full textual representation of a month, such as January or March January to December m Numeric representation of a month, with leading zeros 01 to 12 M A short textual representation of a month Jan to Dec n Numeric representation of a month, without leading zeros 1 to 12 t Number of days in the given month 28 to 31 L Whether it's a leap year 1 if it is a leap year, 0 otherwise. o ISO-8601 year number (identical to (Y), but if the ISO week number (W) Examples: 1998 or 2004 belongs to the previous or next year, that year is used instead) Y A full numeric representation of a year, 4 digits Examples: 1999 or 2003 y A two digit representation of a year Examples: 99 or 03 a Lowercase Ante meridiem and Post meridiem am or pm A Uppercase Ante meridiem and Post meridiem AM or PM g 12-hour format of an hour without leading zeros 1 to 12 G 24-hour format of an hour without leading zeros 0 to 23 h 12-hour format of an hour with leading zeros 01 to 12 H 24-hour format of an hour with leading zeros 00 to 23 i Minutes, with leading zeros 00 to 59 s Seconds, with leading zeros 00 to 59 u Decimal fraction of a second Examples: (minimum 1 digit, arbitrary number of digits allowed) 001 (i.e. 0.001s) or 100 (i.e. 0.100s) or 999 (i.e. 0.999s) or 999876543210 (i.e. 0.999876543210s) O Difference to Greenwich time (GMT) in hours and minutes Example: +1030 P Difference to Greenwich time (GMT) with colon between hours and minutes Example: -08:00 T Timezone abbreviation of the machine running the code Examples: EST, MDT, PDT ... Z Timezone offset in seconds (negative if west of UTC, positive if east) -43200 to 50400 c ISO 8601 date Notes: Examples: 1) If unspecified, the month / day defaults to the current month / day, 1991 or the time defaults to midnight, while the timezone defaults to the 1992-10 or browser's timezone. If a time is specified, it must include both hours 1993-09-20 or and minutes. The "T" delimiter, seconds, milliseconds and timezone 1994-08-19T16:20+01:00 or are optional. 1995-07-18T17:21:28-02:00 or 2) The decimal fraction of a second, if specified, must contain at 1996-06-17T18:22:29.98765+03:00 or least 1 digit (there is no limit to the maximum number 1997-05-16T19:23:30,12345-0400 or of digits allowed), and may be delimited by either a '.' or a ',' 1998-04-15T20:24:31.2468Z or Refer to the examples on the right for the various levels of 1999-03-14T20:24:32Z or date-time granularity which are supported, or see 2000-02-13T21:25:33 http://www.w3.org/TR/NOTE-datetime for more info. 2001-01-12 22:26:34 U Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT) 1193432466 or -2138434463 M$ Microsoft AJAX serialized dates \/Date(1238606590509)\/ (i.e. UTC milliseconds since epoch) or \/Date(1238606590509+0800)\/</pre> * * Example usage (note that you must escape format specifiers with '\\' to render them as character literals): * <pre><code>// Sample date:// 'Wed Jan 10 2007 15:05:01 GMT-0600 (Central Standard Time)'var dt = new Date('1/10/2007 03:05:01 PM GMT-0600');document.write(dt.format('Y-m-d')); // 2007-01-10document.write(dt.format('F j, Y, g:i a')); // January 10, 2007, 3:05 pmdocument.write(dt.format('l, \\t\\he jS \\of F Y h:i:s A')); // Wednesday, the 10th of January 2007 03:05:01 PM</code></pre> * * Here are some standard date/time patterns that you might find helpful. They * are not part of the source of Date.js, but to use them you can simply copy this * block of code into any script that is included after Date.js and they will also become * globally available on the Date object. Feel free to add or remove patterns as needed in your code. * <pre><code>Date.patterns = { ISO8601Long:"Y-m-d H:i:s", ISO8601Short:"Y-m-d", ShortDate: "n/j/Y", LongDate: "l, F d, Y", FullDateTime: "l, F d, Y g:i:s A", MonthDay: "F d", ShortTime: "g:i A", LongTime: "g:i:s A", SortableDateTime: "Y-m-d\\TH:i:s", UniversalSortableDateTime: "Y-m-d H:i:sO", YearMonth: "F, Y"};</code></pre> * * Example usage: * <pre><code>var dt = new Date();document.write(dt.format(Date.patterns.ShortDate));</code></pre> * <p>Developer-written, custom formats may be used by supplying both a formatting and a parsing function * which perform to specialized requirements. The functions are stored in {@link #parseFunctions} and {@link #formatFunctions}.</p> *//* * Most of the date-formatting functions below are the excellent work of Baron Schwartz. * (see http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/) * They generate precompiled functions from format patterns instead of parsing and * processing each pattern every time a date is formatted. These functions are available * on every Date object. */(function() {/** * Global flag which determines if strict date parsing should be used. * Strict date parsing will not roll-over invalid dates, which is the * default behaviour of javascript Date objects. * (see {@link #parseDate} for more information) * Defaults to <tt>false</tt>. * @static * @type Boolean*/Date.useStrict = false;// create private copy of Ext's String.format() method// - to remove unnecessary dependency// - to resolve namespace conflict with M$-Ajax's implementationfunction xf(format) { var args = Array.prototype.slice.call(arguments, 1); return format.replace(/\{(\d+)\}/g, function(m, i) { return args[i]; });}// privateDate.formatCodeToRegex = function(character, currentGroup) { // Note: currentGroup - position in regex result array (see notes for Date.parseCodes below) var p = Date.parseCodes[character]; if (p) { p = typeof p == 'function'? p() : p; Date.parseCodes[character] = p; // reassign function result to prevent repeated execution } return p? Ext.applyIf({ c: p.c? xf(p.c, currentGroup || "{0}") : p.c }, p) : { g:0, c:null, s:Ext.escapeRe(character) // treat unrecognised characters as literals }}// private shorthand for Date.formatCodeToRegex since we'll be using it fairly oftenvar $f = Date.formatCodeToRegex;Ext.apply(Date, { /** * <p>An object hash in which each property is a date parsing function. The property name is the * format string which that function parses.</p> * <p>This object is automatically populated with date parsing functions as * date formats are requested for Ext standard formatting strings.</p> * <p>Custom parsing functions may be inserted into this object, keyed by a name which from then on * may be used as a format string to {@link #parseDate}.<p> * <p>Example:</p><code><pre>Date.parseFunctions['x-date-format'] = myDateParser;</pre></code> * <p>A parsing function should return a Date object, and is passed the following parameters:<div class="mdetail-params"><ul> * <li><code>date</code> : String<div class="sub-desc">The date string to parse.</div></li> * <li><code>strict</code> : Boolean<div class="sub-desc">True to validate date strings while parsing * (i.e. prevent javascript Date "rollover") (The default must be false). * Invalid date strings should return null when parsed.</div></li> * </ul></div></p> * <p>To enable Dates to also be <i>formatted</i> according to that format, a corresponding * formatting function must be placed into the {@link #formatFunctions} property. * @property parseFunctions * @static * @type Object */ parseFunctions: { "M$": function(input, strict) { // note: the timezone offset is ignored since the M$ Ajax server sends // a UTC milliseconds-since-Unix-epoch value (negative values are allowed) var re = new RegExp('\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/'); var r = (input || '').match(re); return r? new Date(((r[1] || '') + r[2]) * 1) : null; } }, parseRegexes: [], /** * <p>An object hash in which each property is a date formatting function. The property name is the * format string which corresponds to the produced formatted date string.</p> * <p>This object is automatically populated with date formatting functions as * date formats are requested for Ext standard formatting strings.</p> * <p>Custom formatting functions may be inserted into this object, keyed by a name which from then on * may be used as a format string to {@link #format}. Example:</p><code><pre>Date.formatFunctions['x-date-format'] = myDateFormatter;</pre></code> * <p>A formatting function should return a string repesentation of the passed Date object:<div class="mdetail-params"><ul> * <li><code>date</code> : Date<div class="sub-desc">The Date to format.</div></li> * </ul></div></p> * <p>To enable date strings to also be <i>parsed</i> according to that format, a corresponding * parsing function must be placed into the {@link #parseFunctions} property. * @property formatFunctions * @static * @type Object */ formatFunctions: { "M$": function() { // UTC milliseconds since Unix epoch (M$-AJAX serialized date format (MRSF)) return '\\/Date(' + this.getTime() + ')\\/'; } }, y2kYear : 50, /** * Date interval constant * @static * @type String */ MILLI : "ms", /** * Date interval constant * @static * @type String */ SECOND : "s", /** * Date interval constant * @static * @type String */ MINUTE : "mi", /** Date interval constant * @static * @type String */ HOUR : "h", /** * Date interval constant * @static * @type String */ DAY : "d", /** * Date interval constant * @static * @type String */ MONTH : "mo", /** * Date interval constant * @static * @type String */ YEAR : "y", /** * <p>An object hash containing default date values used during date parsing.</p> * <p>The following properties are available:<div class="mdetail-params"><ul> * <li><code>y</code> : Number<div class="sub-desc">The default year value. (defaults to undefined)</div></li> * <li><code>m</code> : Number<div class="sub-desc">The default 1-based month value. (defaults to undefined)</div></li> * <li><code>d</code> : Number<div class="sub-desc">The default day value. (defaults to undefined)</div></li> * <li><code>h</code> : Number<div class="sub-desc">The default hour value. (defaults to undefined)</div></li> * <li><code>i</code> : Number<div class="sub-desc">The default minute value. (defaults to undefined)</div></li> * <li><code>s</code> : Number<div class="sub-desc">The default second value. (defaults to undefined)</div></li> * <li><code>ms</code> : Number<div class="sub-desc">The default millisecond value. (defaults to undefined)</div></li> * </ul></div></p> * <p>Override these properties to customize the default date values used by the {@link #parseDate} method.</p> * <p><b>Note: In countries which experience Daylight Saving Time (i.e. DST), the <tt>h</tt>, <tt>i</tt>, <tt>s</tt> * and <tt>ms</tt> properties may coincide with the exact time in which DST takes effect. * It is the responsiblity of the developer to account for this.</b></p> * Example Usage: * <pre><code>// set default day value to the first day of the monthDate.defaults.d = 1;// parse a February date string containing only year and month values.// setting the default day value to 1 prevents weird date rollover issues// when attempting to parse the following date string on, for example, March 31st 2009.Date.parseDate('2009-02', 'Y-m'); // returns a Date object representing February 1st 2009</code></pre> * @property defaults * @static * @type Object */ defaults: {}, /** * An array of textual day names. * Override these values for international dates. * Example: * <pre><code>Date.dayNames = [ 'SundayInYourLang', 'MondayInYourLang', ...];</code></pre> * @type Array * @static */ dayNames : [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -