⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 date.js

📁 ext-2.3.0
💻 JS
📖 第 1 页 / 共 4 页
字号:
            var regexNum = Date.parseRegexes.length,                currentGroup = 1,                calc = [],                regex = [],                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;                    regex.push(String.escape(ch));                } else {                    var obj = $f(ch, currentGroup);                    currentGroup += obj.g;                    regex.push(obj.s);                    if (obj.g && obj.c) {                        calc.push(obj.c);                    }                }            }            Date.parseRegexes[regexNum] = new RegExp("^" + regex.join('') + "$", "i");            Date.parseFunctions[format] = new Function("input", "strict", xf(code, regexNum, calc.join('')));        }    }(),    // private    parseCodes : {        /*         * Notes:         * g = {Number} calculation group (0 or 1. only group 1 contributes to date calculations.)         * c = {String} calculation method (required for group 1. null for group 0. {0} = currentGroup - position in regex result array)         * s = {String} regex pattern. all matches are stored in results[], and are accessible by the calculation mapped to 'c'         */        d: {            g:1,            c:"d = parseInt(results[{0}], 10);\n",            s:"(\\d{2})" // day of month with leading zeroes (01 - 31)        },        j: {            g:1,            c:"d = parseInt(results[{0}], 10);\n",            s:"(\\d{1,2})" // day of month without leading zeroes (1 - 31)        },        D: function() {            for (var a = [], i = 0; i < 7; a.push(Date.getShortDayName(i)), ++i); // get localised short day names            return {                g:0,                c:null,                s:"(?:" + a.join("|") +")"            }        },        l: function() {            return {                g:0,                c:null,                s:"(?:" + Date.dayNames.join("|") + ")"            }        },        N: {            g:0,            c:null,            s:"[1-7]" // ISO-8601 day number (1 (monday) - 7 (sunday))        },        S: {            g:0,            c:null,            s:"(?:st|nd|rd|th)"        },        w: {            g:0,            c:null,            s:"[0-6]" // javascript day number (0 (sunday) - 6 (saturday))        },        z: {            g:1,            c:"z = parseInt(results[{0}], 10);\n",            s:"(\\d{1,3})" // day of the year (0 - 364 (365 in leap years))        },        W: {            g:0,            c:null,            s:"(?:\\d{2})" // ISO-8601 week number (with leading zero)        },        F: function() {            return {                g:1,                c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n", // get localised month number                s:"(" + Date.monthNames.join("|") + ")"            }        },        M: function() {            for (var a = [], i = 0; i < 12; a.push(Date.getShortMonthName(i)), ++i); // get localised short month names            return Ext.applyIf({                s:"(" + a.join("|") + ")"            }, $f("F"));        },        m: {            g:1,            c:"m = parseInt(results[{0}], 10) - 1;\n",            s:"(\\d{2})" // month number with leading zeros (01 - 12)        },        n: {            g:1,            c:"m = parseInt(results[{0}], 10) - 1;\n",            s:"(\\d{1,2})" // month number without leading zeros (1 - 12)        },        t: {            g:0,            c:null,            s:"(?:\\d{2})" // no. of days in the month (28 - 31)        },        L: {            g:0,            c:null,            s:"(?:1|0)"        },        o: function() {            return $f("Y");        },        Y: {            g:1,            c:"y = parseInt(results[{0}], 10);\n",            s:"(\\d{4})" // 4-digit year        },        y: {            g:1,            c:"var ty = parseInt(results[{0}], 10);\n"                + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n", // 2-digit year            s:"(\\d{1,2})"        },        a: {            g:1,            c:"if (results[{0}] == 'am') {\n"                + "if (h == 12) { h = 0; }\n"                + "} else { if (h < 12) { h += 12; }}",            s:"(am|pm)"        },        A: {            g:1,            c:"if (results[{0}] == 'AM') {\n"                + "if (h == 12) { h = 0; }\n"                + "} else { if (h < 12) { h += 12; }}",            s:"(AM|PM)"        },        g: function() {            return $f("G");        },        G: {            g:1,            c:"h = parseInt(results[{0}], 10);\n",            s:"(\\d{1,2})" // 24-hr format of an hour without leading zeroes (0 - 23)        },        h: function() {            return $f("H");        },        H: {            g:1,            c:"h = parseInt(results[{0}], 10);\n",            s:"(\\d{2})" //  24-hr format of an hour with leading zeroes (00 - 23)        },        i: {            g:1,            c:"i = parseInt(results[{0}], 10);\n",            s:"(\\d{2})" // minutes with leading zeros (00 - 59)        },        s: {            g:1,            c:"s = parseInt(results[{0}], 10);\n",            s:"(\\d{2})" // seconds with leading zeros (00 - 59)        },        u: {            g:1,            c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",            s:"(\\d+)" // decimal fraction of a second (minimum = 1 digit, maximum = unlimited)        },        O: {            g:1,            c:[                "o = results[{0}];",                "var sn = o.substring(0,1),", // get + / - sign                    "hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),", // get hours (performs minutes-to-hour conversion also, just in case)                    "mn = o.substring(3,5) % 60;", // get minutes                "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n" // -12hrs <= GMT offset <= 14hrs            ].join("\n"),            s: "([+\-]\\d{4})" // GMT offset in hrs and mins        },        P: {            g:1,            c:[                "o = results[{0}];",                "var sn = o.substring(0,1),", // get + / - sign                    "hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),", // get hours (performs minutes-to-hour conversion also, just in case)                    "mn = o.substring(4,6) % 60;", // get minutes                "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n" // -12hrs <= GMT offset <= 14hrs            ].join("\n"),            s: "([+\-]\\d{2}:\\d{2})" // GMT offset in hrs and mins (with colon separator)        },        T: {            g:0,            c:null,            s:"[A-Z]{1,4}" // timezone abbrev. may be between 1 - 4 chars        },        Z: {            g:1,            c:"zz = results[{0}] * 1;\n" // -43200 <= UTC offset <= 50400                  + "zz = (-43200 <= zz && zz <= 50400)? zz : null;\n",            s:"([+\-]?\\d{1,5})" // leading '+' sign is optional for UTC offset        },        c: function() {            var calc = [],                arr = [                    $f("Y", 1), // year                    $f("m", 2), // month                    $f("d", 3), // day                    $f("h", 4), // hour                    $f("i", 5), // minute                    $f("s", 6), // second                    {c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"}, // decimal fraction of a second (minimum = 1 digit, maximum = unlimited)                    {c:[ // allow either "Z" (i.e. UTC) or "-0530" or "+08:00" (i.e. UTC offset) timezone delimiters. assumes local timezone if no timezone is specified                        "if(results[8]) {", // timezone specified                            "if(results[8] == 'Z'){",                                "zz = 0;", // UTC                            "}else if (results[8].indexOf(':') > -1){",                                $f("P", 8).c, // timezone offset with colon separator                            "}else{",                                $f("O", 8).c, // timezone offset without colon separator                            "}",                        "}"                    ].join('\n')}                ];            for (var i = 0, l = arr.length; i < l; ++i) {                calc.push(arr[i].c);            }            return {                g:1,                c:calc.join(""),                s:[                    arr[0].s, // year (required)                    "(?:", "-", arr[1].s, // month (optional)                        "(?:", "-", arr[2].s, // day (optional)                            "(?:",                                "(?:T| )?", // time delimiter -- either a "T" or a single blank space                                arr[3].s, ":", arr[4].s,  // hour AND minute, delimited by a single colon (optional). MUST be preceded by either a "T" or a single blank space                                "(?::", arr[5].s, ")?", // seconds (optional)                                "(?:(?:\\.|,)(\\d+))?", // decimal fraction of a second (e.g. ",12345" or ".98765") (optional)                                "(Z|(?:[-+]\\d{2}(?::)?\\d{2}))?", // "Z" (UTC) or "-0530" (UTC offset without colon delimiter) or "+08:00" (UTC offset with colon delimiter) (optional)                            ")?",                        ")?",                    ")?"                ].join("")            }        },        U: {            g:1,            c:"u = parseInt(results[{0}], 10);\n",            s:"(-?\\d+)" // leading minus sign indicates seconds before UNIX epoch        }    }});}());Ext.apply(Date.prototype, {    // private    dateFormat : function(format) {        if (Date.formatFunctions[format] == null) {            Date.createFormat(format);        }        return Date.formatFunctions[format].call(this);    },    /**     * Get the timezone abbreviation of the current date (equivalent to the format specifier 'T').     *     * Note: The date string returned by the javascript Date object's toString() method varies     * between browsers (e.g. FF vs IE) and system region settings (e.g. IE in Asia vs IE in America).     * For a given date string e.g. "Thu Oct 25 2007 22:55:35 GMT+0800 (Malay Peninsula Standard Time)",     * getTimezone() first tries to get the timezone abbreviation from between a pair of parentheses     * (which may or may not be present), failing which it proceeds to get the timezone abbreviation     * from the GMT offset portion of the date string.     * @return {String} The abbreviated timezone name (e.g. 'CST', 'PDT', 'EDT', 'MPST' ...).     */    getTimezone : function() {        // the following list shows the differences between date strings from different browsers on a WinXP SP2 machine from an Asian locale:        //        // Opera  : "Thu, 25 Oct 2007 22:53:45 GMT+0800" -- shortest (weirdest) date string of the lot        // Safari : "Thu Oct 25 2007 22:55:35 GMT+0800 (Malay Peninsula Standard Time)" -- value in parentheses always gives the correct timezone (same as FF)        // FF     : "Thu Oct 25 2007 22:55:35 GMT+0800 (Malay Peninsula Standard Time)" -- value in parentheses always gives the correct timezone        // IE     : "Thu Oct 25 22:54:35 UTC+0800 2007" -- (Asian system setting) look for 3-4 letter timezone abbrev        // IE     : "Thu Oct 25 17:06:37 PDT 2007" -- (American system setting) look for 3-4 letter timezone abbrev        //        // this crazy regex attempts to guess the correct timezone abbreviation despite these differences.        // step 1: (?:\((.*)\) -- find timezone in parentheses        // step 2: ([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?) -- if nothing was found in step 1, find timezone from timezone offset portion of date string        // step 3: remove all non uppercase characters found in step 1 and 2        return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, "");    },    /**     * Get the offset from GMT of the current date (equivalent to the format specifier 'O').     * @param {Boolean} colon (optional) true to separate the hours and minutes with a colon (defaults to false).     * @return {String} The 4-character offset string prefixed with + or - (e.g. '-0600').     */    getGMTOffset : function(colon) {        return (this.getTimezoneOffset() > 0 ? "-" : "+")            + String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset()) / 60), 2, "0")            + (colon ? ":" : "")            + String.leftPad(Math.abs(this.getTimezoneOffset() % 60), 2, "0");    },    /**     * Get the numeric day number of the year, adjusted for leap year.     * @return {Number} 0 to 364 (365 in leap years).     */    getDayOfYear: function() {        var i = 0,            num = 0,            d = this.clone(),            m = this.getMonth();        for (i = 0, d.setMonth(0); i < m; d.setMonth(++i)) {            num += d.getDaysInMonth();        }        return num + this.getDate() - 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -