Alien-Web-ExtJS-V3

 view release on metacpan or  search on metacpan

share/docs/source/Date.html  view on Meta::CPAN

 * 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-10
document.write(dt.format('F j, Y, g:i a'));                   // January 10, 2007, 3:05 pm
document.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() {

<span id='Date-static-property-useStrict'>/**
</span> * 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 &lt;tt&gt;false&lt;/tt&gt;.
 * @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 implementation
function xf(format) {
    var args = Array.prototype.slice.call(arguments, 1);
    return format.replace(/\{(\d+)\}/g, function(m, i) {
        return args[i];
    });
}


// private
Date.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 || &quot;{0}&quot;) : 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 often
var $f = Date.formatCodeToRegex;

Ext.apply(Date, {
<span id='Date-static-property-parseFunctions'>    /**
</span>     * &lt;p&gt;An object hash in which each property is a date parsing function. The property name is the
     * format string which that function parses.&lt;/p&gt;
     * &lt;p&gt;This object is automatically populated with date parsing functions as
     * date formats are requested for Ext standard formatting strings.&lt;/p&gt;
     * &lt;p&gt;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}.&lt;p&gt;
     * &lt;p&gt;Example:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
Date.parseFunctions['x-date-format'] = myDateParser;
&lt;/code&gt;&lt;/pre&gt;
     * &lt;p&gt;A parsing function should return a Date object, and is passed the following parameters:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
     * &lt;li&gt;&lt;code&gt;date&lt;/code&gt; : String&lt;div class=&quot;sub-desc&quot;&gt;The date string to parse.&lt;/div&gt;&lt;/li&gt;
     * &lt;li&gt;&lt;code&gt;strict&lt;/code&gt; : Boolean&lt;div class=&quot;sub-desc&quot;&gt;True to validate date strings while parsing
     * (i.e. prevent javascript Date &quot;rollover&quot;) (The default must be false).
     * Invalid date strings should return null when parsed.&lt;/div&gt;&lt;/li&gt;
     * &lt;/ul&gt;&lt;/div&gt;&lt;/p&gt;
     * &lt;p&gt;To enable Dates to also be &lt;i&gt;formatted&lt;/i&gt; according to that format, a corresponding
     * formatting function must be placed into the {@link #formatFunctions} property.
     * @property parseFunctions
     * @static
     * @type Object
     */
    parseFunctions: {
        &quot;M$&quot;: 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: [],

<span id='Date-static-property-formatFunctions'>    /**
</span>     * &lt;p&gt;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.&lt;/p&gt;
     * &lt;p&gt;This object is automatically populated with date formatting functions as
     * date formats are requested for Ext standard formatting strings.&lt;/p&gt;
     * &lt;p&gt;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:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
Date.formatFunctions['x-date-format'] = myDateFormatter;
&lt;/code&gt;&lt;/pre&gt;
     * &lt;p&gt;A formatting function should return a string representation of the passed Date object, and is passed the following parameters:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
     * &lt;li&gt;&lt;code&gt;date&lt;/code&gt; : Date&lt;div class=&quot;sub-desc&quot;&gt;The Date to format.&lt;/div&gt;&lt;/li&gt;
     * &lt;/ul&gt;&lt;/div&gt;&lt;/p&gt;
     * &lt;p&gt;To enable date strings to also be &lt;i&gt;parsed&lt;/i&gt; according to that format, a corresponding
     * parsing function must be placed into the {@link #parseFunctions} property.
     * @property formatFunctions
     * @static
     * @type Object
     */
    formatFunctions: {
        &quot;M$&quot;: function() {

share/docs/source/Date.html  view on Meta::CPAN

        var dt = new Date(y &lt; 100 ? 100 : y, m - 1, d, h, i, s, ms).add(Date.YEAR, y &lt; 100 ? y - 100 : 0);

        return y == dt.getFullYear() &amp;&amp;
            m == dt.getMonth() + 1 &amp;&amp;
            d == dt.getDate() &amp;&amp;
            h == dt.getHours() &amp;&amp;
            i == dt.getMinutes() &amp;&amp;
            s == dt.getSeconds() &amp;&amp;
            ms == dt.getMilliseconds();
    },

<span id='Date-static-method-parseDate'>    /**
</span>     * 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).
     * &lt;p&gt;Example:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
//dt = Fri May 25 2007 (current date)
var dt = new Date();

//dt = Thu May 25 2006 (today&amp;#39;s month/day in 2006)
dt = Date.parseDate(&quot;2006&quot;, &quot;Y&quot;);

//dt = Sun Jan 15 2006 (all date parts specified)
dt = Date.parseDate(&quot;2006-01-15&quot;, &quot;Y-m-d&quot;);

//dt = Sun Jan 15 2006 15:20:01
dt = Date.parseDate(&quot;2006-01-15 3:20:01 PM&quot;, &quot;Y-m-d g:i:s A&quot;);

// attempt to parse Sun Feb 29 2006 03:20:01 in strict mode
dt = Date.parseDate(&quot;2006-02-29 03:20:01&quot;, &quot;Y-m-d H:i:s&quot;, true); // returns null
&lt;/code&gt;&lt;/pre&gt;
     * @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 &quot;rollover&quot;)
                        (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, Ext.isDefined(strict) ? strict : Date.useStrict);
    },

    // 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 || (&quot;'&quot; + String.escape(character) + &quot;'&quot;);
    },

    // private
    createFormat : function(format) {
        var code = [],
            special = false,
            ch = '';

        for (var i = 0; i &lt; format.length; ++i) {
            ch = format.charAt(i);
            if (!special &amp;&amp; ch == &quot;\\&quot;) {
                special = true;
            } else if (special) {
                special = false;
                code.push(&quot;'&quot; + String.escape(ch) + &quot;'&quot;);
            } else {
                code.push(Date.getFormatCode(ch));
            }
        }
        Date.formatFunctions[format] = new Function(&quot;return &quot; + code.join('+'));
    },

    // private
    createParser : function() {
        var code = [
            &quot;var dt, y, m, d, h, i, s, ms, o, z, zz, u, v,&quot;,
                &quot;def = Date.defaults,&quot;,
                &quot;results = String(input).match(Date.parseRegexes[{0}]);&quot;, // either null, or an array of matched strings

            &quot;if(results){&quot;,
                &quot;{1}&quot;,

                &quot;if(u != null){&quot;, // i.e. unix time is defined
                    &quot;v = new Date(u * 1000);&quot;, // give top priority to UNIX time
                &quot;}else{&quot;,
                    // create Date object representing midnight of the current day;
                    // this will provide us with our date defaults
                    // (note: clearTime() handles Daylight Saving Time automatically)
                    &quot;dt = (new Date()).clearTime();&quot;,

                    // date calculations (note: these calculations create a dependency on Ext.num())
                    &quot;y = Ext.num(y, Ext.num(def.y, dt.getFullYear()));&quot;,
                    &quot;m = Ext.num(m, Ext.num(def.m - 1, dt.getMonth()));&quot;,
                    &quot;d = Ext.num(d, Ext.num(def.d, dt.getDate()));&quot;,

                    // time calculations (note: these calculations create a dependency on Ext.num())
                    &quot;h  = Ext.num(h, Ext.num(def.h, dt.getHours()));&quot;,
                    &quot;i  = Ext.num(i, Ext.num(def.i, dt.getMinutes()));&quot;,
                    &quot;s  = Ext.num(s, Ext.num(def.s, dt.getSeconds()));&quot;,
                    &quot;ms = Ext.num(ms, Ext.num(def.ms, dt.getMilliseconds()));&quot;,

                    &quot;if(z &gt;= 0 &amp;&amp; y &gt;= 0){&quot;,
                        // both the year and zero-based day of year are defined and &gt;= 0.
                        // these 2 values alone provide sufficient info to create a full date object

                        // create Date object representing January 1st for the given year
                        // handle years &lt; 100 appropriately
                        &quot;v = new Date(y &lt; 100 ? 100 : y, 0, 1, h, i, s, ms).add(Date.YEAR, y &lt; 100 ? y - 100 : 0);&quot;,

                        // then add day of year, checking for Date &quot;rollover&quot; if necessary
                        &quot;v = !strict? v : (strict === true &amp;&amp; (z &lt;= 364 || (v.isLeapYear() &amp;&amp; z &lt;= 365))? v.add(Date.DAY, z) : null);&quot;,
                    &quot;}else if(strict === true &amp;&amp; !Date.isValid(y, m + 1, d, h, i, s, ms)){&quot;, // check for Date &quot;rollover&quot;
                        &quot;v = null;&quot;, // invalid date, so return null
                    &quot;}else{&quot;,
                        // plain old Date object
                        // handle years &lt; 100 properly
                        &quot;v = new Date(y &lt; 100 ? 100 : y, m, d, h, i, s, ms).add(Date.YEAR, y &lt; 100 ? y - 100 : 0);&quot;,
                    &quot;}&quot;,
                &quot;}&quot;,
            &quot;}&quot;,

            &quot;if(v){&quot;,
                // favour UTC offset over GMT offset
                &quot;if(zz != null){&quot;,
                    // reset to UTC, then add offset
                    &quot;v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);&quot;,
                &quot;}else if(o){&quot;,
                    // reset to GMT, then add offset
                    &quot;v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));&quot;,
                &quot;}&quot;,
            &quot;}&quot;,

            &quot;return v;&quot;
        ].join('\n');

        return function(format) {
            var regexNum = Date.parseRegexes.length,
                currentGroup = 1,
                calc = [],
                regex = [],
                special = false,
                ch = &quot;&quot;,
                i = 0,
                obj,
                last;

            for (; i &lt; format.length; ++i) {
                ch = format.charAt(i);
                if (!special &amp;&amp; ch == &quot;\\&quot;) {
                    special = true;
                } else if (special) {
                    special = false;
                    regex.push(String.escape(ch));
                } else {
                    obj = $f(ch, currentGroup);
                    currentGroup += obj.g;
                    regex.push(obj.s);
                    if (obj.g &amp;&amp; obj.c) {
                        if (obj.calcLast) {
                            last = obj.c;
                        } else {
                            calc.push(obj.c);
                        }
                    }
                }
            }
            
            if (last) {
                calc.push(last);
            }

            Date.parseRegexes[regexNum] = new RegExp(&quot;^&quot; + regex.join('') + &quot;$&quot;, 'i');
            Date.parseFunctions[format] = new Function(&quot;input&quot;, &quot;strict&quot;, 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:&quot;d = parseInt(results[{0}], 10);\n&quot;,
            s:&quot;(\\d{2})&quot; // day of month with leading zeroes (01 - 31)
        },
        j: {
            g:1,
            c:&quot;d = parseInt(results[{0}], 10);\n&quot;,
            s:&quot;(\\d{1,2})&quot; // day of month without leading zeroes (1 - 31)
        },
        D: function() {
            for (var a = [], i = 0; i &lt; 7; a.push(Date.getShortDayName(i)), ++i); // get localised short day names
            return {
                g:0,
                c:null,
                s:&quot;(?:&quot; + a.join(&quot;|&quot;) +&quot;)&quot;
            };
        },
        l: function() {
            return {
                g:0,
                c:null,
                s:&quot;(?:&quot; + Date.dayNames.join(&quot;|&quot;) + &quot;)&quot;
            };
        },
        N: {
            g:0,
            c:null,
            s:&quot;[1-7]&quot; // ISO-8601 day number (1 (monday) - 7 (sunday))



( run in 1.304 second using v1.01-cache-2.11-cpan-119454b85a5 )