momentjs-rails 1.6.2 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +1 -1
 - data/changelog.md +4 -0
 - data/vendor/assets/javascripts/moment.js +407 -219
 - data/vendor/assets/javascripts/moment/bg.js +66 -0
 - data/vendor/assets/javascripts/moment/ca.js +5 -1
 - data/vendor/assets/javascripts/moment/cv.js +54 -0
 - data/vendor/assets/javascripts/moment/da.js +6 -2
 - data/vendor/assets/javascripts/moment/de.js +5 -1
 - data/vendor/assets/javascripts/moment/en-ca.js +58 -0
 - data/vendor/assets/javascripts/moment/en-gb.js +5 -1
 - data/vendor/assets/javascripts/moment/es.js +5 -1
 - data/vendor/assets/javascripts/moment/eu.js +5 -1
 - data/vendor/assets/javascripts/moment/fi.js +6 -2
 - data/vendor/assets/javascripts/moment/fr-ca.js +54 -0
 - data/vendor/assets/javascripts/moment/fr.js +5 -1
 - data/vendor/assets/javascripts/moment/gl.js +5 -1
 - data/vendor/assets/javascripts/moment/hu.js +108 -0
 - data/vendor/assets/javascripts/moment/is.js +5 -1
 - data/vendor/assets/javascripts/moment/it.js +8 -4
 - data/vendor/assets/javascripts/moment/ja.js +61 -0
 - data/vendor/assets/javascripts/moment/jp.js +12 -5
 - data/vendor/assets/javascripts/moment/ko.js +58 -0
 - data/vendor/assets/javascripts/moment/kr.js +9 -2
 - data/vendor/assets/javascripts/moment/nb.js +5 -1
 - data/vendor/assets/javascripts/moment/nl.js +15 -3
 - data/vendor/assets/javascripts/moment/pl.js +5 -1
 - data/vendor/assets/javascripts/moment/pt-br.js +58 -0
 - data/vendor/assets/javascripts/moment/pt.js +6 -2
 - data/vendor/assets/javascripts/moment/ru.js +38 -8
 - data/vendor/assets/javascripts/moment/sv.js +5 -1
 - data/vendor/assets/javascripts/moment/tr.js +40 -6
 - data/vendor/assets/javascripts/moment/zh-cn.js +6 -2
 - data/vendor/assets/javascripts/moment/zh-tw.js +5 -1
 - metadata +12 -4
 
    
        data/README.md
    CHANGED
    
    | 
         @@ -24,7 +24,7 @@ If you want to include a localization file, also add the following directive: 
     | 
|
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
            ## Versioning
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            momentjs-rails 1. 
     | 
| 
      
 27 
     | 
    
         
            +
            momentjs-rails 1.7.0 == Moment.js 1.7.0
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
            Every attempt is made to mirror the currently shipping Momentum.js version number wherever possible.
         
     | 
| 
       30 
30 
     | 
    
         
             
            The major, minor, and patch version numbers will always represent the Momentum.js version. Should a gem
         
     | 
    
        data/changelog.md
    CHANGED
    
    
| 
         @@ -1,29 +1,38 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // moment.js
         
     | 
| 
       2 
     | 
    
         
            -
            // version : 1. 
     | 
| 
      
 2 
     | 
    
         
            +
            // version : 1.7.0
         
     | 
| 
       3 
3 
     | 
    
         
             
            // author : Tim Wood
         
     | 
| 
       4 
4 
     | 
    
         
             
            // license : MIT
         
     | 
| 
       5 
5 
     | 
    
         
             
            // momentjs.com
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            (function (Date, undefined) {
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 10 
     | 
    
         
            +
                    Constants
         
     | 
| 
      
 11 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       9 
13 
     | 
    
         
             
                var moment,
         
     | 
| 
       10 
     | 
    
         
            -
                    VERSION = "1. 
     | 
| 
      
 14 
     | 
    
         
            +
                    VERSION = "1.7.0",
         
     | 
| 
       11 
15 
     | 
    
         
             
                    round = Math.round, i,
         
     | 
| 
       12 
16 
     | 
    
         
             
                    // internal storage for language config files
         
     | 
| 
       13 
17 
     | 
    
         
             
                    languages = {},
         
     | 
| 
       14 
18 
     | 
    
         
             
                    currentLanguage = 'en',
         
     | 
| 
       15 
19 
     | 
    
         | 
| 
       16 
20 
     | 
    
         
             
                    // check for nodeJS
         
     | 
| 
       17 
     | 
    
         
            -
                    hasModule = (typeof module !== 'undefined'),
         
     | 
| 
      
 21 
     | 
    
         
            +
                    hasModule = (typeof module !== 'undefined' && module.exports),
         
     | 
| 
       18 
22 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                    //  
     | 
| 
       20 
     | 
    
         
            -
                     
     | 
| 
      
 23 
     | 
    
         
            +
                    // Parameters to check for on the lang config.  This list of properties
         
     | 
| 
      
 24 
     | 
    
         
            +
                    // will be inherited from English if not provided in a language
         
     | 
| 
      
 25 
     | 
    
         
            +
                    // definition.  monthsParse is also a lang config property, but it
         
     | 
| 
      
 26 
     | 
    
         
            +
                    // cannot be inherited and as such cannot be enumerated here.
         
     | 
| 
      
 27 
     | 
    
         
            +
                    langConfigProperties = 'months|monthsShort|weekdays|weekdaysShort|weekdaysMin|longDateFormat|calendar|relativeTime|ordinal|meridiem'.split('|'),
         
     | 
| 
       21 
28 
     | 
    
         | 
| 
       22 
29 
     | 
    
         
             
                    // ASP.NET json date format regex
         
     | 
| 
       23 
30 
     | 
    
         
             
                    aspNetJsonRegex = /^\/?Date\((\-?\d+)/i,
         
     | 
| 
       24 
31 
     | 
    
         | 
| 
       25 
32 
     | 
    
         
             
                    // format tokens
         
     | 
| 
       26 
     | 
    
         
            -
                    formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?| 
     | 
| 
      
 33 
     | 
    
         
            +
                    formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|zz?|ZZ?)/g,
         
     | 
| 
      
 34 
     | 
    
         
            +
                    localFormattingTokens = /(LT|LL?L?L?)/g,
         
     | 
| 
      
 35 
     | 
    
         
            +
                    formattingRemoveEscapes = /(^\[)|(\\)|\]$/g,
         
     | 
| 
       27 
36 
     | 
    
         | 
| 
       28 
37 
     | 
    
         
             
                    // parsing tokens
         
     | 
| 
       29 
38 
     | 
    
         
             
                    parseMultipleFormatChunker = /([0-9a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)/gi,
         
     | 
| 
         @@ -32,7 +41,7 @@ 
     | 
|
| 
       32 
41 
     | 
    
         
             
                    parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99
         
     | 
| 
       33 
42 
     | 
    
         
             
                    parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999
         
     | 
| 
       34 
43 
     | 
    
         
             
                    parseTokenThreeDigits = /\d{3}/, // 000 - 999
         
     | 
| 
       35 
     | 
    
         
            -
                    parseTokenFourDigits = /\d{4}/, //  
     | 
| 
      
 44 
     | 
    
         
            +
                    parseTokenFourDigits = /\d{1,4}/, // 0 - 9999
         
     | 
| 
       36 
45 
     | 
    
         
             
                    parseTokenWord = /[0-9a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+/i, // any word characters or numbers
         
     | 
| 
       37 
46 
     | 
    
         
             
                    parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/i, // +00:00 -00:00 +0000 -0000 or Z
         
     | 
| 
       38 
47 
     | 
    
         
             
                    parseTokenT = /T/i, // T (ISO seperator)
         
     | 
| 
         @@ -63,20 +72,77 @@ 
     | 
|
| 
       63 
72 
     | 
    
         
             
                        'Days' : 864e5,
         
     | 
| 
       64 
73 
     | 
    
         
             
                        'Months' : 2592e6,
         
     | 
| 
       65 
74 
     | 
    
         
             
                        'Years' : 31536e6
         
     | 
| 
       66 
     | 
    
         
            -
                    } 
     | 
| 
      
 75 
     | 
    
         
            +
                    },
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                    // format function strings
         
     | 
| 
      
 78 
     | 
    
         
            +
                    formatFunctions = {},
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                    /*
         
     | 
| 
      
 81 
     | 
    
         
            +
                     * moment.fn.format uses new Function() to create an inlined formatting function.
         
     | 
| 
      
 82 
     | 
    
         
            +
                     * Results are a 3x speed boost
         
     | 
| 
      
 83 
     | 
    
         
            +
                     * http://jsperf.com/momentjs-cached-format-functions
         
     | 
| 
      
 84 
     | 
    
         
            +
                     *
         
     | 
| 
      
 85 
     | 
    
         
            +
                     * These strings are appended into a function using replaceFormatTokens and makeFormatFunction
         
     | 
| 
      
 86 
     | 
    
         
            +
                     */
         
     | 
| 
      
 87 
     | 
    
         
            +
                    formatFunctionStrings = {
         
     | 
| 
      
 88 
     | 
    
         
            +
                        // a = placeholder
         
     | 
| 
      
 89 
     | 
    
         
            +
                        // b = placeholder
         
     | 
| 
      
 90 
     | 
    
         
            +
                        // t = the current moment being formatted
         
     | 
| 
      
 91 
     | 
    
         
            +
                        // v = getValueAtKey function
         
     | 
| 
      
 92 
     | 
    
         
            +
                        // o = language.ordinal function
         
     | 
| 
      
 93 
     | 
    
         
            +
                        // p = leftZeroFill function
         
     | 
| 
      
 94 
     | 
    
         
            +
                        // m = language.meridiem value or function
         
     | 
| 
      
 95 
     | 
    
         
            +
                        M    : '(a=t.month()+1)',
         
     | 
| 
      
 96 
     | 
    
         
            +
                        MMM  : 'v("monthsShort",t.month())',
         
     | 
| 
      
 97 
     | 
    
         
            +
                        MMMM : 'v("months",t.month())',
         
     | 
| 
      
 98 
     | 
    
         
            +
                        D    : '(a=t.date())',
         
     | 
| 
      
 99 
     | 
    
         
            +
                        DDD  : '(a=new Date(t.year(),t.month(),t.date()),b=new Date(t.year(),0,1),a=~~(((a-b)/864e5)+1.5))',
         
     | 
| 
      
 100 
     | 
    
         
            +
                        d    : '(a=t.day())',
         
     | 
| 
      
 101 
     | 
    
         
            +
                        dd   : 'v("weekdaysMin",t.day())',
         
     | 
| 
      
 102 
     | 
    
         
            +
                        ddd  : 'v("weekdaysShort",t.day())',
         
     | 
| 
      
 103 
     | 
    
         
            +
                        dddd : 'v("weekdays",t.day())',
         
     | 
| 
      
 104 
     | 
    
         
            +
                        w    : '(a=new Date(t.year(),t.month(),t.date()-t.day()+5),b=new Date(a.getFullYear(),0,4),a=~~((a-b)/864e5/7+1.5))',
         
     | 
| 
      
 105 
     | 
    
         
            +
                        YY   : 'p(t.year()%100,2)',
         
     | 
| 
      
 106 
     | 
    
         
            +
                        YYYY : 'p(t.year(),4)',
         
     | 
| 
      
 107 
     | 
    
         
            +
                        a    : 'm(t.hours(),t.minutes(),!0)',
         
     | 
| 
      
 108 
     | 
    
         
            +
                        A    : 'm(t.hours(),t.minutes(),!1)',
         
     | 
| 
      
 109 
     | 
    
         
            +
                        H    : 't.hours()',
         
     | 
| 
      
 110 
     | 
    
         
            +
                        h    : 't.hours()%12||12',
         
     | 
| 
      
 111 
     | 
    
         
            +
                        m    : 't.minutes()',
         
     | 
| 
      
 112 
     | 
    
         
            +
                        s    : 't.seconds()',
         
     | 
| 
      
 113 
     | 
    
         
            +
                        S    : '~~(t.milliseconds()/100)',
         
     | 
| 
      
 114 
     | 
    
         
            +
                        SS   : 'p(~~(t.milliseconds()/10),2)',
         
     | 
| 
      
 115 
     | 
    
         
            +
                        SSS  : 'p(t.milliseconds(),3)',
         
     | 
| 
      
 116 
     | 
    
         
            +
                        Z    : '((a=-t.zone())<0?((a=-a),"-"):"+")+p(~~(a/60),2)+":"+p(~~a%60,2)',
         
     | 
| 
      
 117 
     | 
    
         
            +
                        ZZ   : '((a=-t.zone())<0?((a=-a),"-"):"+")+p(~~(10*a/6),4)'
         
     | 
| 
      
 118 
     | 
    
         
            +
                    },
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                    ordinalizeTokens = 'DDD w M D d'.split(' '),
         
     | 
| 
      
 121 
     | 
    
         
            +
                    paddedTokens = 'M D H h m s w'.split(' ');
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                while (ordinalizeTokens.length) {
         
     | 
| 
      
 124 
     | 
    
         
            +
                    i = ordinalizeTokens.pop();
         
     | 
| 
      
 125 
     | 
    
         
            +
                    formatFunctionStrings[i + 'o'] = formatFunctionStrings[i] + '+o(a)';
         
     | 
| 
      
 126 
     | 
    
         
            +
                }
         
     | 
| 
      
 127 
     | 
    
         
            +
                while (paddedTokens.length) {
         
     | 
| 
      
 128 
     | 
    
         
            +
                    i = paddedTokens.pop();
         
     | 
| 
      
 129 
     | 
    
         
            +
                    formatFunctionStrings[i + i] = 'p(' + formatFunctionStrings[i] + ',2)';
         
     | 
| 
      
 130 
     | 
    
         
            +
                }
         
     | 
| 
      
 131 
     | 
    
         
            +
                formatFunctionStrings.DDDD = 'p(' + formatFunctionStrings.DDD + ',3)';
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 135 
     | 
    
         
            +
                    Constructors
         
     | 
| 
      
 136 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
       67 
138 
     | 
    
         | 
| 
       68 
139 
     | 
    
         
             
                // Moment prototype object
         
     | 
| 
       69 
     | 
    
         
            -
                function Moment(date, isUTC) {
         
     | 
| 
      
 140 
     | 
    
         
            +
                function Moment(date, isUTC, lang) {
         
     | 
| 
       70 
141 
     | 
    
         
             
                    this._d = date;
         
     | 
| 
       71 
142 
     | 
    
         
             
                    this._isUTC = !!isUTC;
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                    if (number < 0) {
         
     | 
| 
       76 
     | 
    
         
            -
                        return Math.ceil(number);
         
     | 
| 
       77 
     | 
    
         
            -
                    } else {
         
     | 
| 
       78 
     | 
    
         
            -
                        return Math.floor(number);
         
     | 
| 
       79 
     | 
    
         
            -
                    }
         
     | 
| 
      
 143 
     | 
    
         
            +
                    this._a = date._a || null;
         
     | 
| 
      
 144 
     | 
    
         
            +
                    date._a = null;
         
     | 
| 
      
 145 
     | 
    
         
            +
                    this._lang = lang || false;
         
     | 
| 
       80 
146 
     | 
    
         
             
                }
         
     | 
| 
       81 
147 
     | 
    
         | 
| 
       82 
148 
     | 
    
         
             
                // Duration Constructor
         
     | 
| 
         @@ -129,6 +195,22 @@ 
     | 
|
| 
       129 
195 
     | 
    
         
             
                    years += absRound(months / 12);
         
     | 
| 
       130 
196 
     | 
    
         | 
| 
       131 
197 
     | 
    
         
             
                    data.years = years;
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
      
 199 
     | 
    
         
            +
                    this._lang = false;
         
     | 
| 
      
 200 
     | 
    
         
            +
                }
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 204 
     | 
    
         
            +
                    Helpers
         
     | 
| 
      
 205 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                function absRound(number) {
         
     | 
| 
      
 209 
     | 
    
         
            +
                    if (number < 0) {
         
     | 
| 
      
 210 
     | 
    
         
            +
                        return Math.ceil(number);
         
     | 
| 
      
 211 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 212 
     | 
    
         
            +
                        return Math.floor(number);
         
     | 
| 
      
 213 
     | 
    
         
            +
                    }
         
     | 
| 
       132 
214 
     | 
    
         
             
                }
         
     | 
| 
       133 
215 
     | 
    
         | 
| 
       134 
216 
     | 
    
         
             
                // left zero fill a number
         
     | 
| 
         @@ -167,141 +249,152 @@ 
     | 
|
| 
       167 
249 
     | 
    
         
             
                    return Object.prototype.toString.call(input) === '[object Array]';
         
     | 
| 
       168 
250 
     | 
    
         
             
                }
         
     | 
| 
       169 
251 
     | 
    
         | 
| 
      
 252 
     | 
    
         
            +
                // compare two arrays, return the number of differences
         
     | 
| 
      
 253 
     | 
    
         
            +
                function compareArrays(array1, array2) {
         
     | 
| 
      
 254 
     | 
    
         
            +
                    var len = Math.min(array1.length, array2.length),
         
     | 
| 
      
 255 
     | 
    
         
            +
                        lengthDiff = Math.abs(array1.length - array2.length),
         
     | 
| 
      
 256 
     | 
    
         
            +
                        diffs = 0,
         
     | 
| 
      
 257 
     | 
    
         
            +
                        i;
         
     | 
| 
      
 258 
     | 
    
         
            +
                    for (i = 0; i < len; i++) {
         
     | 
| 
      
 259 
     | 
    
         
            +
                        if (~~array1[i] !== ~~array2[i]) {
         
     | 
| 
      
 260 
     | 
    
         
            +
                            diffs++;
         
     | 
| 
      
 261 
     | 
    
         
            +
                        }
         
     | 
| 
      
 262 
     | 
    
         
            +
                    }
         
     | 
| 
      
 263 
     | 
    
         
            +
                    return diffs + lengthDiff;
         
     | 
| 
      
 264 
     | 
    
         
            +
                }
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
       170 
266 
     | 
    
         
             
                // convert an array to a date.
         
     | 
| 
       171 
267 
     | 
    
         
             
                // the array should mirror the parameters below
         
     | 
| 
       172 
268 
     | 
    
         
             
                // note: all values past the year are optional and will default to the lowest possible value.
         
     | 
| 
       173 
269 
     | 
    
         
             
                // [year, month, day , hour, minute, second, millisecond]
         
     | 
| 
       174 
     | 
    
         
            -
                function dateFromArray(input) {
         
     | 
| 
       175 
     | 
    
         
            -
                     
     | 
| 
      
 270 
     | 
    
         
            +
                function dateFromArray(input, asUTC) {
         
     | 
| 
      
 271 
     | 
    
         
            +
                    var i, date;
         
     | 
| 
      
 272 
     | 
    
         
            +
                    for (i = 1; i < 7; i++) {
         
     | 
| 
      
 273 
     | 
    
         
            +
                        input[i] = (input[i] == null) ? (i === 2 ? 1 : 0) : input[i];
         
     | 
| 
      
 274 
     | 
    
         
            +
                    }
         
     | 
| 
      
 275 
     | 
    
         
            +
                    // we store whether we used utc or not in the input array
         
     | 
| 
      
 276 
     | 
    
         
            +
                    input[7] = asUTC;
         
     | 
| 
      
 277 
     | 
    
         
            +
                    date = new Date(0);
         
     | 
| 
      
 278 
     | 
    
         
            +
                    if (asUTC) {
         
     | 
| 
      
 279 
     | 
    
         
            +
                        date.setUTCFullYear(input[0], input[1], input[2]);
         
     | 
| 
      
 280 
     | 
    
         
            +
                        date.setUTCHours(input[3], input[4], input[5], input[6]);
         
     | 
| 
      
 281 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 282 
     | 
    
         
            +
                        date.setFullYear(input[0], input[1], input[2]);
         
     | 
| 
      
 283 
     | 
    
         
            +
                        date.setHours(input[3], input[4], input[5], input[6]);
         
     | 
| 
      
 284 
     | 
    
         
            +
                    }
         
     | 
| 
      
 285 
     | 
    
         
            +
                    date._a = input;
         
     | 
| 
      
 286 
     | 
    
         
            +
                    return date;
         
     | 
| 
      
 287 
     | 
    
         
            +
                }
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
                // Loads a language definition into the `languages` cache.  The function
         
     | 
| 
      
 290 
     | 
    
         
            +
                // takes a key and optionally values.  If not in the browser and no values
         
     | 
| 
      
 291 
     | 
    
         
            +
                // are provided, it will load the language file module.  As a convenience,
         
     | 
| 
      
 292 
     | 
    
         
            +
                // this function also returns the language values.
         
     | 
| 
      
 293 
     | 
    
         
            +
                function loadLang(key, values) {
         
     | 
| 
      
 294 
     | 
    
         
            +
                    var i, m,
         
     | 
| 
      
 295 
     | 
    
         
            +
                        parse = [];
         
     | 
| 
      
 296 
     | 
    
         
            +
             
     | 
| 
      
 297 
     | 
    
         
            +
                    if (!values && hasModule) {
         
     | 
| 
      
 298 
     | 
    
         
            +
                        values = require('./lang/' + key);
         
     | 
| 
      
 299 
     | 
    
         
            +
                    }
         
     | 
| 
      
 300 
     | 
    
         
            +
                    
         
     | 
| 
      
 301 
     | 
    
         
            +
                    for (i = 0; i < langConfigProperties.length; i++) {
         
     | 
| 
      
 302 
     | 
    
         
            +
                        // If a language definition does not provide a value, inherit
         
     | 
| 
      
 303 
     | 
    
         
            +
                        // from English
         
     | 
| 
      
 304 
     | 
    
         
            +
                        values[langConfigProperties[i]] = values[langConfigProperties[i]] ||
         
     | 
| 
      
 305 
     | 
    
         
            +
                          languages.en[langConfigProperties[i]];
         
     | 
| 
      
 306 
     | 
    
         
            +
                    }
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
      
 308 
     | 
    
         
            +
                    for (i = 0; i < 12; i++) {
         
     | 
| 
      
 309 
     | 
    
         
            +
                        m = moment([2000, i]);
         
     | 
| 
      
 310 
     | 
    
         
            +
                        parse[i] = new RegExp('^' + (values.months[i] || values.months(m, '')) + 
         
     | 
| 
      
 311 
     | 
    
         
            +
                            '|^' + (values.monthsShort[i] || values.monthsShort(m, '')).replace('.', ''), 'i');
         
     | 
| 
      
 312 
     | 
    
         
            +
                    }
         
     | 
| 
      
 313 
     | 
    
         
            +
                    values.monthsParse = values.monthsParse || parse;
         
     | 
| 
      
 314 
     | 
    
         
            +
             
     | 
| 
      
 315 
     | 
    
         
            +
                    languages[key] = values;
         
     | 
| 
      
 316 
     | 
    
         
            +
                    
         
     | 
| 
      
 317 
     | 
    
         
            +
                    return values;
         
     | 
| 
      
 318 
     | 
    
         
            +
                }
         
     | 
| 
      
 319 
     | 
    
         
            +
             
     | 
| 
      
 320 
     | 
    
         
            +
                // Determines which language definition to use and returns it.
         
     | 
| 
      
 321 
     | 
    
         
            +
                //
         
     | 
| 
      
 322 
     | 
    
         
            +
                // With no parameters, it will return the global language.  If you
         
     | 
| 
      
 323 
     | 
    
         
            +
                // pass in a language key, such as 'en', it will return the
         
     | 
| 
      
 324 
     | 
    
         
            +
                // definition for 'en', so long as 'en' has already been loaded using
         
     | 
| 
      
 325 
     | 
    
         
            +
                // moment.lang.  If you pass in a moment or duration instance, it
         
     | 
| 
      
 326 
     | 
    
         
            +
                // will decide the language based on that, or default to the global
         
     | 
| 
      
 327 
     | 
    
         
            +
                // language.
         
     | 
| 
      
 328 
     | 
    
         
            +
                function getLangDefinition(m) {
         
     | 
| 
      
 329 
     | 
    
         
            +
                    var langKey = (typeof m === 'string') && m ||
         
     | 
| 
      
 330 
     | 
    
         
            +
                                  m && m._lang ||
         
     | 
| 
      
 331 
     | 
    
         
            +
                                  null;
         
     | 
| 
      
 332 
     | 
    
         
            +
             
     | 
| 
      
 333 
     | 
    
         
            +
                    return langKey ? (languages[langKey] || loadLang(langKey)) : moment;
         
     | 
| 
      
 334 
     | 
    
         
            +
                }
         
     | 
| 
      
 335 
     | 
    
         
            +
             
     | 
| 
      
 336 
     | 
    
         
            +
             
     | 
| 
      
 337 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 338 
     | 
    
         
            +
                    Formatting
         
     | 
| 
      
 339 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 340 
     | 
    
         
            +
             
     | 
| 
      
 341 
     | 
    
         
            +
             
     | 
| 
      
 342 
     | 
    
         
            +
                // helper for building inline formatting functions
         
     | 
| 
      
 343 
     | 
    
         
            +
                function replaceFormatTokens(token) {
         
     | 
| 
      
 344 
     | 
    
         
            +
                    return formatFunctionStrings[token] ? 
         
     | 
| 
      
 345 
     | 
    
         
            +
                        ("'+(" + formatFunctionStrings[token] + ")+'") :
         
     | 
| 
      
 346 
     | 
    
         
            +
                        token.replace(formattingRemoveEscapes, "").replace(/\\?'/g, "\\'");
         
     | 
| 
      
 347 
     | 
    
         
            +
                }
         
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
      
 349 
     | 
    
         
            +
                // helper for recursing long date formatting tokens
         
     | 
| 
      
 350 
     | 
    
         
            +
                function replaceLongDateFormatTokens(input) {
         
     | 
| 
      
 351 
     | 
    
         
            +
                    return getLangDefinition().longDateFormat[input] || input;
         
     | 
| 
      
 352 
     | 
    
         
            +
                }
         
     | 
| 
      
 353 
     | 
    
         
            +
             
     | 
| 
      
 354 
     | 
    
         
            +
                function makeFormatFunction(format) {
         
     | 
| 
      
 355 
     | 
    
         
            +
                    var output = "var a,b;return '" +
         
     | 
| 
      
 356 
     | 
    
         
            +
                        format.replace(formattingTokens, replaceFormatTokens) + "';",
         
     | 
| 
      
 357 
     | 
    
         
            +
                        Fn = Function; // get around jshint
         
     | 
| 
      
 358 
     | 
    
         
            +
                    // t = the current moment being formatted
         
     | 
| 
      
 359 
     | 
    
         
            +
                    // v = getValueAtKey function
         
     | 
| 
      
 360 
     | 
    
         
            +
                    // o = language.ordinal function
         
     | 
| 
      
 361 
     | 
    
         
            +
                    // p = leftZeroFill function
         
     | 
| 
      
 362 
     | 
    
         
            +
                    // m = language.meridiem value or function
         
     | 
| 
      
 363 
     | 
    
         
            +
                    return new Fn('t', 'v', 'o', 'p', 'm', output);
         
     | 
| 
      
 364 
     | 
    
         
            +
                }
         
     | 
| 
      
 365 
     | 
    
         
            +
             
     | 
| 
      
 366 
     | 
    
         
            +
                function makeOrGetFormatFunction(format) {
         
     | 
| 
      
 367 
     | 
    
         
            +
                    if (!formatFunctions[format]) {
         
     | 
| 
      
 368 
     | 
    
         
            +
                        formatFunctions[format] = makeFormatFunction(format);
         
     | 
| 
      
 369 
     | 
    
         
            +
                    }
         
     | 
| 
      
 370 
     | 
    
         
            +
                    return formatFunctions[format];
         
     | 
| 
       176 
371 
     | 
    
         
             
                }
         
     | 
| 
       177 
372 
     | 
    
         | 
| 
       178 
373 
     | 
    
         
             
                // format date using native date object
         
     | 
| 
       179 
     | 
    
         
            -
                function formatMoment(m,  
     | 
| 
       180 
     | 
    
         
            -
                    var  
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
                         
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
                         
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
       192 
     | 
    
         
            -
                    // return formatted string or non string.
         
     | 
| 
       193 
     | 
    
         
            -
                    //
         
     | 
| 
       194 
     | 
    
         
            -
                    // uses switch/case instead of an object of named functions (like http://phpjs.org/functions/date:380)
         
     | 
| 
       195 
     | 
    
         
            -
                    // for minification and performance
         
     | 
| 
       196 
     | 
    
         
            -
                    // see http://jsperf.com/object-of-functions-vs-switch for performance comparison
         
     | 
| 
       197 
     | 
    
         
            -
                    function replaceFunction(input) {
         
     | 
| 
       198 
     | 
    
         
            -
                        // create a couple variables to be used later inside one of the cases.
         
     | 
| 
       199 
     | 
    
         
            -
                        var a, b;
         
     | 
| 
       200 
     | 
    
         
            -
                        switch (input) {
         
     | 
| 
       201 
     | 
    
         
            -
                            // MONTH
         
     | 
| 
       202 
     | 
    
         
            -
                        case 'M' :
         
     | 
| 
       203 
     | 
    
         
            -
                            return currentMonth + 1;
         
     | 
| 
       204 
     | 
    
         
            -
                        case 'Mo' :
         
     | 
| 
       205 
     | 
    
         
            -
                            return (currentMonth + 1) + ordinal(currentMonth + 1);
         
     | 
| 
       206 
     | 
    
         
            -
                        case 'MM' :
         
     | 
| 
       207 
     | 
    
         
            -
                            return leftZeroFill(currentMonth + 1, 2);
         
     | 
| 
       208 
     | 
    
         
            -
                        case 'MMM' :
         
     | 
| 
       209 
     | 
    
         
            -
                            return moment.monthsShort[currentMonth];
         
     | 
| 
       210 
     | 
    
         
            -
                        case 'MMMM' :
         
     | 
| 
       211 
     | 
    
         
            -
                            return moment.months[currentMonth];
         
     | 
| 
       212 
     | 
    
         
            -
                        // DAY OF MONTH
         
     | 
| 
       213 
     | 
    
         
            -
                        case 'D' :
         
     | 
| 
       214 
     | 
    
         
            -
                            return currentDate;
         
     | 
| 
       215 
     | 
    
         
            -
                        case 'Do' :
         
     | 
| 
       216 
     | 
    
         
            -
                            return currentDate + ordinal(currentDate);
         
     | 
| 
       217 
     | 
    
         
            -
                        case 'DD' :
         
     | 
| 
       218 
     | 
    
         
            -
                            return leftZeroFill(currentDate, 2);
         
     | 
| 
       219 
     | 
    
         
            -
                        // DAY OF YEAR
         
     | 
| 
       220 
     | 
    
         
            -
                        case 'DDD' :
         
     | 
| 
       221 
     | 
    
         
            -
                            a = new Date(currentYear, currentMonth, currentDate);
         
     | 
| 
       222 
     | 
    
         
            -
                            b = new Date(currentYear, 0, 1);
         
     | 
| 
       223 
     | 
    
         
            -
                            return ~~ (((a - b) / 864e5) + 1.5);
         
     | 
| 
       224 
     | 
    
         
            -
                        case 'DDDo' :
         
     | 
| 
       225 
     | 
    
         
            -
                            a = replaceFunction('DDD');
         
     | 
| 
       226 
     | 
    
         
            -
                            return a + ordinal(a);
         
     | 
| 
       227 
     | 
    
         
            -
                        case 'DDDD' :
         
     | 
| 
       228 
     | 
    
         
            -
                            return leftZeroFill(replaceFunction('DDD'), 3);
         
     | 
| 
       229 
     | 
    
         
            -
                        // WEEKDAY
         
     | 
| 
       230 
     | 
    
         
            -
                        case 'd' :
         
     | 
| 
       231 
     | 
    
         
            -
                            return currentDay;
         
     | 
| 
       232 
     | 
    
         
            -
                        case 'do' :
         
     | 
| 
       233 
     | 
    
         
            -
                            return currentDay + ordinal(currentDay);
         
     | 
| 
       234 
     | 
    
         
            -
                        case 'ddd' :
         
     | 
| 
       235 
     | 
    
         
            -
                            return moment.weekdaysShort[currentDay];
         
     | 
| 
       236 
     | 
    
         
            -
                        case 'dddd' :
         
     | 
| 
       237 
     | 
    
         
            -
                            return moment.weekdays[currentDay];
         
     | 
| 
       238 
     | 
    
         
            -
                        // WEEK OF YEAR
         
     | 
| 
       239 
     | 
    
         
            -
                        case 'w' :
         
     | 
| 
       240 
     | 
    
         
            -
                            a = new Date(currentYear, currentMonth, currentDate - currentDay + 5);
         
     | 
| 
       241 
     | 
    
         
            -
                            b = new Date(a.getFullYear(), 0, 4);
         
     | 
| 
       242 
     | 
    
         
            -
                            return ~~ ((a - b) / 864e5 / 7 + 1.5);
         
     | 
| 
       243 
     | 
    
         
            -
                        case 'wo' :
         
     | 
| 
       244 
     | 
    
         
            -
                            a = replaceFunction('w');
         
     | 
| 
       245 
     | 
    
         
            -
                            return a + ordinal(a);
         
     | 
| 
       246 
     | 
    
         
            -
                        case 'ww' :
         
     | 
| 
       247 
     | 
    
         
            -
                            return leftZeroFill(replaceFunction('w'), 2);
         
     | 
| 
       248 
     | 
    
         
            -
                        // YEAR
         
     | 
| 
       249 
     | 
    
         
            -
                        case 'YY' :
         
     | 
| 
       250 
     | 
    
         
            -
                            return leftZeroFill(currentYear % 100, 2);
         
     | 
| 
       251 
     | 
    
         
            -
                        case 'YYYY' :
         
     | 
| 
       252 
     | 
    
         
            -
                            return currentYear;
         
     | 
| 
       253 
     | 
    
         
            -
                        // AM / PM
         
     | 
| 
       254 
     | 
    
         
            -
                        case 'a' :
         
     | 
| 
       255 
     | 
    
         
            -
                            return meridiem ? meridiem(currentHours, currentMinutes, false) : (currentHours > 11 ? 'pm' : 'am');
         
     | 
| 
       256 
     | 
    
         
            -
                        case 'A' :
         
     | 
| 
       257 
     | 
    
         
            -
                            return meridiem ? meridiem(currentHours, currentMinutes, true) : (currentHours > 11 ? 'PM' : 'AM');
         
     | 
| 
       258 
     | 
    
         
            -
                        // 24 HOUR
         
     | 
| 
       259 
     | 
    
         
            -
                        case 'H' :
         
     | 
| 
       260 
     | 
    
         
            -
                            return currentHours;
         
     | 
| 
       261 
     | 
    
         
            -
                        case 'HH' :
         
     | 
| 
       262 
     | 
    
         
            -
                            return leftZeroFill(currentHours, 2);
         
     | 
| 
       263 
     | 
    
         
            -
                        // 12 HOUR
         
     | 
| 
       264 
     | 
    
         
            -
                        case 'h' :
         
     | 
| 
       265 
     | 
    
         
            -
                            return currentHours % 12 || 12;
         
     | 
| 
       266 
     | 
    
         
            -
                        case 'hh' :
         
     | 
| 
       267 
     | 
    
         
            -
                            return leftZeroFill(currentHours % 12 || 12, 2);
         
     | 
| 
       268 
     | 
    
         
            -
                        // MINUTE
         
     | 
| 
       269 
     | 
    
         
            -
                        case 'm' :
         
     | 
| 
       270 
     | 
    
         
            -
                            return currentMinutes;
         
     | 
| 
       271 
     | 
    
         
            -
                        case 'mm' :
         
     | 
| 
       272 
     | 
    
         
            -
                            return leftZeroFill(currentMinutes, 2);
         
     | 
| 
       273 
     | 
    
         
            -
                        // SECOND
         
     | 
| 
       274 
     | 
    
         
            -
                        case 's' :
         
     | 
| 
       275 
     | 
    
         
            -
                            return currentSeconds;
         
     | 
| 
       276 
     | 
    
         
            -
                        case 'ss' :
         
     | 
| 
       277 
     | 
    
         
            -
                            return leftZeroFill(currentSeconds, 2);
         
     | 
| 
       278 
     | 
    
         
            -
                        // MILLISECONDS
         
     | 
| 
       279 
     | 
    
         
            -
                        case 'S' :
         
     | 
| 
       280 
     | 
    
         
            -
                            return ~~ (currentMilliseconds / 100);
         
     | 
| 
       281 
     | 
    
         
            -
                        case 'SS' :
         
     | 
| 
       282 
     | 
    
         
            -
                            return leftZeroFill(~~(currentMilliseconds / 10), 2);
         
     | 
| 
       283 
     | 
    
         
            -
                        case 'SSS' :
         
     | 
| 
       284 
     | 
    
         
            -
                            return leftZeroFill(currentMilliseconds, 3);
         
     | 
| 
       285 
     | 
    
         
            -
                        // TIMEZONE
         
     | 
| 
       286 
     | 
    
         
            -
                        case 'Z' :
         
     | 
| 
       287 
     | 
    
         
            -
                            return (currentZone < 0 ? '-' : '+') + leftZeroFill(~~(Math.abs(currentZone) / 60), 2) + ':' + leftZeroFill(~~(Math.abs(currentZone) % 60), 2);
         
     | 
| 
       288 
     | 
    
         
            -
                        case 'ZZ' :
         
     | 
| 
       289 
     | 
    
         
            -
                            return (currentZone < 0 ? '-' : '+') + leftZeroFill(~~(10 * Math.abs(currentZone) / 6), 4);
         
     | 
| 
       290 
     | 
    
         
            -
                        // LONG DATES
         
     | 
| 
       291 
     | 
    
         
            -
                        case 'L' :
         
     | 
| 
       292 
     | 
    
         
            -
                        case 'LL' :
         
     | 
| 
       293 
     | 
    
         
            -
                        case 'LLL' :
         
     | 
| 
       294 
     | 
    
         
            -
                        case 'LLLL' :
         
     | 
| 
       295 
     | 
    
         
            -
                        case 'LT' :
         
     | 
| 
       296 
     | 
    
         
            -
                            return formatMoment(m, moment.longDateFormat[input]);
         
     | 
| 
       297 
     | 
    
         
            -
                        // DEFAULT
         
     | 
| 
       298 
     | 
    
         
            -
                        default :
         
     | 
| 
       299 
     | 
    
         
            -
                            return input.replace(/(^\[)|(\\)|\]$/g, "");
         
     | 
| 
       300 
     | 
    
         
            -
                        }
         
     | 
| 
      
 374 
     | 
    
         
            +
                function formatMoment(m, format) {
         
     | 
| 
      
 375 
     | 
    
         
            +
                    var lang = getLangDefinition(m);
         
     | 
| 
      
 376 
     | 
    
         
            +
             
     | 
| 
      
 377 
     | 
    
         
            +
                    function getValueFromArray(key, index) {
         
     | 
| 
      
 378 
     | 
    
         
            +
                        return lang[key].call ? lang[key](m, format) : lang[key][index];
         
     | 
| 
      
 379 
     | 
    
         
            +
                    }
         
     | 
| 
      
 380 
     | 
    
         
            +
             
     | 
| 
      
 381 
     | 
    
         
            +
                    while (localFormattingTokens.test(format)) {
         
     | 
| 
      
 382 
     | 
    
         
            +
                        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
         
     | 
| 
      
 383 
     | 
    
         
            +
                    }
         
     | 
| 
      
 384 
     | 
    
         
            +
             
     | 
| 
      
 385 
     | 
    
         
            +
                    if (!formatFunctions[format]) {
         
     | 
| 
      
 386 
     | 
    
         
            +
                        formatFunctions[format] = makeFormatFunction(format);
         
     | 
| 
       301 
387 
     | 
    
         
             
                    }
         
     | 
| 
       302 
     | 
    
         
            -
             
     | 
| 
      
 388 
     | 
    
         
            +
             
     | 
| 
      
 389 
     | 
    
         
            +
                    return formatFunctions[format](m, getValueFromArray, lang.ordinal, leftZeroFill, lang.meridiem);
         
     | 
| 
       303 
390 
     | 
    
         
             
                }
         
     | 
| 
       304 
391 
     | 
    
         | 
| 
      
 392 
     | 
    
         
            +
             
     | 
| 
      
 393 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 394 
     | 
    
         
            +
                    Parsing
         
     | 
| 
      
 395 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 396 
     | 
    
         
            +
             
     | 
| 
      
 397 
     | 
    
         
            +
             
     | 
| 
       305 
398 
     | 
    
         
             
                // get the regex to find the next token
         
     | 
| 
       306 
399 
     | 
    
         
             
                function getParseRegexForToken(token) {
         
     | 
| 
       307 
400 
     | 
    
         
             
                    switch (token) {
         
     | 
| 
         @@ -316,6 +409,7 @@ 
     | 
|
| 
       316 
409 
     | 
    
         
             
                        return parseTokenOneToThreeDigits;
         
     | 
| 
       317 
410 
     | 
    
         
             
                    case 'MMM':
         
     | 
| 
       318 
411 
     | 
    
         
             
                    case 'MMMM':
         
     | 
| 
      
 412 
     | 
    
         
            +
                    case 'dd':
         
     | 
| 
       319 
413 
     | 
    
         
             
                    case 'ddd':
         
     | 
| 
       320 
414 
     | 
    
         
             
                    case 'dddd':
         
     | 
| 
       321 
415 
     | 
    
         
             
                    case 'a':
         
     | 
| 
         @@ -328,7 +422,6 @@ 
     | 
|
| 
       328 
422 
     | 
    
         
             
                        return parseTokenT;
         
     | 
| 
       329 
423 
     | 
    
         
             
                    case 'MM':
         
     | 
| 
       330 
424 
     | 
    
         
             
                    case 'DD':
         
     | 
| 
       331 
     | 
    
         
            -
                    case 'dd':
         
     | 
| 
       332 
425 
     | 
    
         
             
                    case 'YY':
         
     | 
| 
       333 
426 
     | 
    
         
             
                    case 'HH':
         
     | 
| 
       334 
427 
     | 
    
         
             
                    case 'hh':
         
     | 
| 
         @@ -360,7 +453,7 @@ 
     | 
|
| 
       360 
453 
     | 
    
         
             
                    case 'MMM' : // fall through to MMMM
         
     | 
| 
       361 
454 
     | 
    
         
             
                    case 'MMMM' :
         
     | 
| 
       362 
455 
     | 
    
         
             
                        for (a = 0; a < 12; a++) {
         
     | 
| 
       363 
     | 
    
         
            -
                            if ( 
     | 
| 
      
 456 
     | 
    
         
            +
                            if (getLangDefinition().monthsParse[a].test(input)) {
         
     | 
| 
       364 
457 
     | 
    
         
             
                                datePartArray[1] = a;
         
     | 
| 
       365 
458 
     | 
    
         
             
                                break;
         
     | 
| 
       366 
459 
     | 
    
         
             
                            }
         
     | 
| 
         @@ -371,7 +464,9 @@ 
     | 
|
| 
       371 
464 
     | 
    
         
             
                    case 'DD' : // fall through to DDDD
         
     | 
| 
       372 
465 
     | 
    
         
             
                    case 'DDD' : // fall through to DDDD
         
     | 
| 
       373 
466 
     | 
    
         
             
                    case 'DDDD' :
         
     | 
| 
       374 
     | 
    
         
            -
                         
     | 
| 
      
 467 
     | 
    
         
            +
                        if (input != null) {
         
     | 
| 
      
 468 
     | 
    
         
            +
                            datePartArray[2] = ~~input;
         
     | 
| 
      
 469 
     | 
    
         
            +
                        }
         
     | 
| 
       375 
470 
     | 
    
         
             
                        break;
         
     | 
| 
       376 
471 
     | 
    
         
             
                    // YEAR
         
     | 
| 
       377 
472 
     | 
    
         
             
                    case 'YY' :
         
     | 
| 
         @@ -456,21 +551,7 @@ 
     | 
|
| 
       456 
551 
     | 
    
         
             
                    datePartArray[3] += config.tzh;
         
     | 
| 
       457 
552 
     | 
    
         
             
                    datePartArray[4] += config.tzm;
         
     | 
| 
       458 
553 
     | 
    
         
             
                    // return
         
     | 
| 
       459 
     | 
    
         
            -
                    return config.isUTC 
     | 
| 
       460 
     | 
    
         
            -
                }
         
     | 
| 
       461 
     | 
    
         
            -
             
     | 
| 
       462 
     | 
    
         
            -
                // compare two arrays, return the number of differences
         
     | 
| 
       463 
     | 
    
         
            -
                function compareArrays(array1, array2) {
         
     | 
| 
       464 
     | 
    
         
            -
                    var len = Math.min(array1.length, array2.length),
         
     | 
| 
       465 
     | 
    
         
            -
                        lengthDiff = Math.abs(array1.length - array2.length),
         
     | 
| 
       466 
     | 
    
         
            -
                        diffs = 0,
         
     | 
| 
       467 
     | 
    
         
            -
                        i;
         
     | 
| 
       468 
     | 
    
         
            -
                    for (i = 0; i < len; i++) {
         
     | 
| 
       469 
     | 
    
         
            -
                        if (~~array1[i] !== ~~array2[i]) {
         
     | 
| 
       470 
     | 
    
         
            -
                            diffs++;
         
     | 
| 
       471 
     | 
    
         
            -
                        }
         
     | 
| 
       472 
     | 
    
         
            -
                    }
         
     | 
| 
       473 
     | 
    
         
            -
                    return diffs + lengthDiff;
         
     | 
| 
      
 554 
     | 
    
         
            +
                    return dateFromArray(datePartArray, config.isUTC);
         
     | 
| 
       474 
555 
     | 
    
         
             
                }
         
     | 
| 
       475 
556 
     | 
    
         | 
| 
       476 
557 
     | 
    
         
             
                // date from string and array of format strings
         
     | 
| 
         @@ -512,15 +593,21 @@ 
     | 
|
| 
       512 
593 
     | 
    
         
             
                    return new Date(string);
         
     | 
| 
       513 
594 
     | 
    
         
             
                }
         
     | 
| 
       514 
595 
     | 
    
         | 
| 
      
 596 
     | 
    
         
            +
             
     | 
| 
      
 597 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 598 
     | 
    
         
            +
                    Relative Time
         
     | 
| 
      
 599 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 600 
     | 
    
         
            +
             
     | 
| 
      
 601 
     | 
    
         
            +
             
     | 
| 
       515 
602 
     | 
    
         
             
                // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
         
     | 
| 
       516 
     | 
    
         
            -
                function substituteTimeAgo(string, number, withoutSuffix, isFuture) {
         
     | 
| 
       517 
     | 
    
         
            -
                    var rt =  
     | 
| 
      
 603 
     | 
    
         
            +
                function substituteTimeAgo(string, number, withoutSuffix, isFuture, lang) {
         
     | 
| 
      
 604 
     | 
    
         
            +
                    var rt = lang.relativeTime[string];
         
     | 
| 
       518 
605 
     | 
    
         
             
                    return (typeof rt === 'function') ?
         
     | 
| 
       519 
606 
     | 
    
         
             
                        rt(number || 1, !!withoutSuffix, string, isFuture) :
         
     | 
| 
       520 
607 
     | 
    
         
             
                        rt.replace(/%d/i, number || 1);
         
     | 
| 
       521 
608 
     | 
    
         
             
                }
         
     | 
| 
       522 
609 
     | 
    
         | 
| 
       523 
     | 
    
         
            -
                function relativeTime(milliseconds, withoutSuffix) {
         
     | 
| 
      
 610 
     | 
    
         
            +
                function relativeTime(milliseconds, withoutSuffix, lang) {
         
     | 
| 
       524 
611 
     | 
    
         
             
                    var seconds = round(Math.abs(milliseconds) / 1000),
         
     | 
| 
       525 
612 
     | 
    
         
             
                        minutes = round(seconds / 60),
         
     | 
| 
       526 
613 
     | 
    
         
             
                        hours = round(minutes / 60),
         
     | 
| 
         @@ -538,20 +625,25 @@ 
     | 
|
| 
       538 
625 
     | 
    
         
             
                            years === 1 && ['y'] || ['yy', years];
         
     | 
| 
       539 
626 
     | 
    
         
             
                    args[2] = withoutSuffix;
         
     | 
| 
       540 
627 
     | 
    
         
             
                    args[3] = milliseconds > 0;
         
     | 
| 
      
 628 
     | 
    
         
            +
                    args[4] = lang;
         
     | 
| 
       541 
629 
     | 
    
         
             
                    return substituteTimeAgo.apply({}, args);
         
     | 
| 
       542 
630 
     | 
    
         
             
                }
         
     | 
| 
       543 
631 
     | 
    
         | 
| 
      
 632 
     | 
    
         
            +
             
     | 
| 
      
 633 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 634 
     | 
    
         
            +
                    Top Level Functions
         
     | 
| 
      
 635 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 636 
     | 
    
         
            +
             
     | 
| 
      
 637 
     | 
    
         
            +
             
     | 
| 
       544 
638 
     | 
    
         
             
                moment = function (input, format) {
         
     | 
| 
       545 
639 
     | 
    
         
             
                    if (input === null || input === '') {
         
     | 
| 
       546 
640 
     | 
    
         
             
                        return null;
         
     | 
| 
       547 
641 
     | 
    
         
             
                    }
         
     | 
| 
       548 
642 
     | 
    
         
             
                    var date,
         
     | 
| 
       549 
     | 
    
         
            -
                        matched 
     | 
| 
       550 
     | 
    
         
            -
                        isUTC;
         
     | 
| 
      
 643 
     | 
    
         
            +
                        matched;
         
     | 
| 
       551 
644 
     | 
    
         
             
                    // parse Moment object
         
     | 
| 
       552 
645 
     | 
    
         
             
                    if (moment.isMoment(input)) {
         
     | 
| 
       553 
     | 
    
         
            -
                         
     | 
| 
       554 
     | 
    
         
            -
                        isUTC = input._isUTC;
         
     | 
| 
      
 646 
     | 
    
         
            +
                        return new Moment(new Date(+input._d), input._isUTC, input._lang);
         
     | 
| 
       555 
647 
     | 
    
         
             
                    // parse string and format
         
     | 
| 
       556 
648 
     | 
    
         
             
                    } else if (format) {
         
     | 
| 
       557 
649 
     | 
    
         
             
                        if (isArray(format)) {
         
     | 
| 
         @@ -569,17 +661,23 @@ 
     | 
|
| 
       569 
661 
     | 
    
         
             
                            typeof input === 'string' ? makeDateFromString(input) :
         
     | 
| 
       570 
662 
     | 
    
         
             
                            new Date(input);
         
     | 
| 
       571 
663 
     | 
    
         
             
                    }
         
     | 
| 
       572 
     | 
    
         
            -
             
     | 
| 
      
 664 
     | 
    
         
            +
             
     | 
| 
      
 665 
     | 
    
         
            +
                    return new Moment(date);
         
     | 
| 
       573 
666 
     | 
    
         
             
                };
         
     | 
| 
       574 
667 
     | 
    
         | 
| 
       575 
668 
     | 
    
         
             
                // creating with utc
         
     | 
| 
       576 
669 
     | 
    
         
             
                moment.utc = function (input, format) {
         
     | 
| 
       577 
670 
     | 
    
         
             
                    if (isArray(input)) {
         
     | 
| 
       578 
     | 
    
         
            -
                        return new Moment( 
     | 
| 
      
 671 
     | 
    
         
            +
                        return new Moment(dateFromArray(input, true), true);
         
     | 
| 
      
 672 
     | 
    
         
            +
                    }
         
     | 
| 
      
 673 
     | 
    
         
            +
                    // if we don't have a timezone, we need to add one to trigger parsing into utc
         
     | 
| 
      
 674 
     | 
    
         
            +
                    if (typeof input === 'string' && !parseTokenTimezone.exec(input)) {
         
     | 
| 
      
 675 
     | 
    
         
            +
                        input += ' +0000';
         
     | 
| 
      
 676 
     | 
    
         
            +
                        if (format) {
         
     | 
| 
      
 677 
     | 
    
         
            +
                            format += ' Z';
         
     | 
| 
      
 678 
     | 
    
         
            +
                        }
         
     | 
| 
       579 
679 
     | 
    
         
             
                    }
         
     | 
| 
       580 
     | 
    
         
            -
                    return (format 
     | 
| 
       581 
     | 
    
         
            -
                        moment(input + ' +0000', format + ' Z').utc() :
         
     | 
| 
       582 
     | 
    
         
            -
                        moment(input && !parseTokenTimezone.exec(input) ? input + '+0000' : input).utc();
         
     | 
| 
      
 680 
     | 
    
         
            +
                    return moment(input, format).utc();
         
     | 
| 
       583 
681 
     | 
    
         
             
                };
         
     | 
| 
       584 
682 
     | 
    
         | 
| 
       585 
683 
     | 
    
         
             
                // creating with unix timestamp (in seconds)
         
     | 
| 
         @@ -591,7 +689,8 @@ 
     | 
|
| 
       591 
689 
     | 
    
         
             
                moment.duration = function (input, key) {
         
     | 
| 
       592 
690 
     | 
    
         
             
                    var isDuration = moment.isDuration(input),
         
     | 
| 
       593 
691 
     | 
    
         
             
                        isNumber = (typeof input === 'number'),
         
     | 
| 
       594 
     | 
    
         
            -
                        duration = (isDuration ? input._data : (isNumber ? {} : input)) 
     | 
| 
      
 692 
     | 
    
         
            +
                        duration = (isDuration ? input._data : (isNumber ? {} : input)),
         
     | 
| 
      
 693 
     | 
    
         
            +
                        ret;
         
     | 
| 
       595 
694 
     | 
    
         | 
| 
       596 
695 
     | 
    
         
             
                    if (isNumber) {
         
     | 
| 
       597 
696 
     | 
    
         
             
                        if (key) {
         
     | 
| 
         @@ -601,7 +700,13 @@ 
     | 
|
| 
       601 
700 
     | 
    
         
             
                        }
         
     | 
| 
       602 
701 
     | 
    
         
             
                    }
         
     | 
| 
       603 
702 
     | 
    
         | 
| 
       604 
     | 
    
         
            -
                     
     | 
| 
      
 703 
     | 
    
         
            +
                    ret = new Duration(duration);
         
     | 
| 
      
 704 
     | 
    
         
            +
             
     | 
| 
      
 705 
     | 
    
         
            +
                    if (isDuration) {
         
     | 
| 
      
 706 
     | 
    
         
            +
                        ret._lang = input._lang;
         
     | 
| 
      
 707 
     | 
    
         
            +
                    }
         
     | 
| 
      
 708 
     | 
    
         
            +
             
     | 
| 
      
 709 
     | 
    
         
            +
                    return ret;
         
     | 
| 
       605 
710 
     | 
    
         
             
                };
         
     | 
| 
       606 
711 
     | 
    
         | 
| 
       607 
712 
     | 
    
         
             
                // humanizeDuration
         
     | 
| 
         @@ -617,40 +722,49 @@ 
     | 
|
| 
       617 
722 
     | 
    
         
             
                // default format
         
     | 
| 
       618 
723 
     | 
    
         
             
                moment.defaultFormat = isoFormat;
         
     | 
| 
       619 
724 
     | 
    
         | 
| 
       620 
     | 
    
         
            -
                //  
     | 
| 
      
 725 
     | 
    
         
            +
                // This function will load languages and then set the global language.  If
         
     | 
| 
      
 726 
     | 
    
         
            +
                // no arguments are passed in, it will simply return the current global
         
     | 
| 
      
 727 
     | 
    
         
            +
                // language key.
         
     | 
| 
       621 
728 
     | 
    
         
             
                moment.lang = function (key, values) {
         
     | 
| 
       622 
     | 
    
         
            -
                    var i 
     | 
| 
       623 
     | 
    
         
            -
             
     | 
| 
      
 729 
     | 
    
         
            +
                    var i;
         
     | 
| 
      
 730 
     | 
    
         
            +
             
     | 
| 
       624 
731 
     | 
    
         
             
                    if (!key) {
         
     | 
| 
       625 
732 
     | 
    
         
             
                        return currentLanguage;
         
     | 
| 
       626 
733 
     | 
    
         
             
                    }
         
     | 
| 
       627 
     | 
    
         
            -
                    if (values) {
         
     | 
| 
       628 
     | 
    
         
            -
                         
     | 
| 
       629 
     | 
    
         
            -
                            parse[i] = new RegExp('^' + values.months[i] + '|^' + values.monthsShort[i].replace('.', ''), 'i');
         
     | 
| 
       630 
     | 
    
         
            -
                        }
         
     | 
| 
       631 
     | 
    
         
            -
                        values.monthsParse = values.monthsParse || parse;
         
     | 
| 
       632 
     | 
    
         
            -
                        languages[key] = values;
         
     | 
| 
      
 734 
     | 
    
         
            +
                    if (values || !languages[key]) {
         
     | 
| 
      
 735 
     | 
    
         
            +
                        loadLang(key, values);
         
     | 
| 
       633 
736 
     | 
    
         
             
                    }
         
     | 
| 
       634 
737 
     | 
    
         
             
                    if (languages[key]) {
         
     | 
| 
      
 738 
     | 
    
         
            +
                        // deprecated, to get the language definition variables, use the
         
     | 
| 
      
 739 
     | 
    
         
            +
                        // moment.fn.lang method or the getLangDefinition function.
         
     | 
| 
       635 
740 
     | 
    
         
             
                        for (i = 0; i < langConfigProperties.length; i++) {
         
     | 
| 
       636 
     | 
    
         
            -
                            moment[langConfigProperties[i]] = languages[key][langConfigProperties[i]] 
     | 
| 
       637 
     | 
    
         
            -
                                languages.en[langConfigProperties[i]];
         
     | 
| 
      
 741 
     | 
    
         
            +
                            moment[langConfigProperties[i]] = languages[key][langConfigProperties[i]];
         
     | 
| 
       638 
742 
     | 
    
         
             
                        }
         
     | 
| 
      
 743 
     | 
    
         
            +
                        moment.monthsParse = languages[key].monthsParse;
         
     | 
| 
       639 
744 
     | 
    
         
             
                        currentLanguage = key;
         
     | 
| 
       640 
     | 
    
         
            -
                    } else {
         
     | 
| 
       641 
     | 
    
         
            -
                        if (hasModule) {
         
     | 
| 
       642 
     | 
    
         
            -
                            req = require('./lang/' + key);
         
     | 
| 
       643 
     | 
    
         
            -
                            moment.lang(key, req);
         
     | 
| 
       644 
     | 
    
         
            -
                        }
         
     | 
| 
       645 
745 
     | 
    
         
             
                    }
         
     | 
| 
       646 
746 
     | 
    
         
             
                };
         
     | 
| 
       647 
747 
     | 
    
         | 
| 
       648 
     | 
    
         
            -
                //  
     | 
| 
      
 748 
     | 
    
         
            +
                // returns language data
         
     | 
| 
      
 749 
     | 
    
         
            +
                moment.langData = getLangDefinition;
         
     | 
| 
      
 750 
     | 
    
         
            +
             
     | 
| 
      
 751 
     | 
    
         
            +
                // compare moment object
         
     | 
| 
      
 752 
     | 
    
         
            +
                moment.isMoment = function (obj) {
         
     | 
| 
      
 753 
     | 
    
         
            +
                    return obj instanceof Moment;
         
     | 
| 
      
 754 
     | 
    
         
            +
                };
         
     | 
| 
      
 755 
     | 
    
         
            +
             
     | 
| 
      
 756 
     | 
    
         
            +
                // for typechecking Duration objects
         
     | 
| 
      
 757 
     | 
    
         
            +
                moment.isDuration = function (obj) {
         
     | 
| 
      
 758 
     | 
    
         
            +
                    return obj instanceof Duration;
         
     | 
| 
      
 759 
     | 
    
         
            +
                };
         
     | 
| 
      
 760 
     | 
    
         
            +
             
     | 
| 
      
 761 
     | 
    
         
            +
                // Set default language, other languages will inherit from English.
         
     | 
| 
       649 
762 
     | 
    
         
             
                moment.lang('en', {
         
     | 
| 
       650 
763 
     | 
    
         
             
                    months : "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
         
     | 
| 
       651 
764 
     | 
    
         
             
                    monthsShort : "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
         
     | 
| 
       652 
765 
     | 
    
         
             
                    weekdays : "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
         
     | 
| 
       653 
766 
     | 
    
         
             
                    weekdaysShort : "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
         
     | 
| 
      
 767 
     | 
    
         
            +
                    weekdaysMin : "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
         
     | 
| 
       654 
768 
     | 
    
         
             
                    longDateFormat : {
         
     | 
| 
       655 
769 
     | 
    
         
             
                        LT : "h:mm A",
         
     | 
| 
       656 
770 
     | 
    
         
             
                        L : "MM/DD/YYYY",
         
     | 
| 
         @@ -658,7 +772,13 @@ 
     | 
|
| 
       658 
772 
     | 
    
         
             
                        LLL : "MMMM D YYYY LT",
         
     | 
| 
       659 
773 
     | 
    
         
             
                        LLLL : "dddd, MMMM D YYYY LT"
         
     | 
| 
       660 
774 
     | 
    
         
             
                    },
         
     | 
| 
       661 
     | 
    
         
            -
                    meridiem :  
     | 
| 
      
 775 
     | 
    
         
            +
                    meridiem : function (hours, minutes, isLower) {
         
     | 
| 
      
 776 
     | 
    
         
            +
                        if (hours > 11) {
         
     | 
| 
      
 777 
     | 
    
         
            +
                            return isLower ? 'pm' : 'PM';
         
     | 
| 
      
 778 
     | 
    
         
            +
                        } else {
         
     | 
| 
      
 779 
     | 
    
         
            +
                            return isLower ? 'am' : 'AM';
         
     | 
| 
      
 780 
     | 
    
         
            +
                        }
         
     | 
| 
      
 781 
     | 
    
         
            +
                    },
         
     | 
| 
       662 
782 
     | 
    
         
             
                    calendar : {
         
     | 
| 
       663 
783 
     | 
    
         
             
                        sameDay : '[Today at] LT',
         
     | 
| 
       664 
784 
     | 
    
         
             
                        nextDay : '[Tomorrow at] LT',
         
     | 
| 
         @@ -691,17 +811,12 @@ 
     | 
|
| 
       691 
811 
     | 
    
         
             
                    }
         
     | 
| 
       692 
812 
     | 
    
         
             
                });
         
     | 
| 
       693 
813 
     | 
    
         | 
| 
       694 
     | 
    
         
            -
                // compare moment object
         
     | 
| 
       695 
     | 
    
         
            -
                moment.isMoment = function (obj) {
         
     | 
| 
       696 
     | 
    
         
            -
                    return obj instanceof Moment;
         
     | 
| 
       697 
     | 
    
         
            -
                };
         
     | 
| 
       698 
814 
     | 
    
         | 
| 
       699 
     | 
    
         
            -
                 
     | 
| 
       700 
     | 
    
         
            -
             
     | 
| 
       701 
     | 
    
         
            -
             
     | 
| 
       702 
     | 
    
         
            -
             
     | 
| 
      
 815 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 816 
     | 
    
         
            +
                    Moment Prototype
         
     | 
| 
      
 817 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 818 
     | 
    
         
            +
             
     | 
| 
       703 
819 
     | 
    
         | 
| 
       704 
     | 
    
         
            -
                // shortcut for prototype
         
     | 
| 
       705 
820 
     | 
    
         
             
                moment.fn = Moment.prototype = {
         
     | 
| 
       706 
821 
     | 
    
         | 
| 
       707 
822 
     | 
    
         
             
                    clone : function () {
         
     | 
| 
         @@ -724,6 +839,27 @@ 
     | 
|
| 
       724 
839 
     | 
    
         
             
                        return this._d;
         
     | 
| 
       725 
840 
     | 
    
         
             
                    },
         
     | 
| 
       726 
841 
     | 
    
         | 
| 
      
 842 
     | 
    
         
            +
                    toArray : function () {
         
     | 
| 
      
 843 
     | 
    
         
            +
                        var m = this;
         
     | 
| 
      
 844 
     | 
    
         
            +
                        return [
         
     | 
| 
      
 845 
     | 
    
         
            +
                            m.year(),
         
     | 
| 
      
 846 
     | 
    
         
            +
                            m.month(),
         
     | 
| 
      
 847 
     | 
    
         
            +
                            m.date(),
         
     | 
| 
      
 848 
     | 
    
         
            +
                            m.hours(),
         
     | 
| 
      
 849 
     | 
    
         
            +
                            m.minutes(),
         
     | 
| 
      
 850 
     | 
    
         
            +
                            m.seconds(),
         
     | 
| 
      
 851 
     | 
    
         
            +
                            m.milliseconds(),
         
     | 
| 
      
 852 
     | 
    
         
            +
                            !!this._isUTC
         
     | 
| 
      
 853 
     | 
    
         
            +
                        ];
         
     | 
| 
      
 854 
     | 
    
         
            +
                    },
         
     | 
| 
      
 855 
     | 
    
         
            +
             
     | 
| 
      
 856 
     | 
    
         
            +
                    isValid : function () {
         
     | 
| 
      
 857 
     | 
    
         
            +
                        if (this._a) {
         
     | 
| 
      
 858 
     | 
    
         
            +
                            return !compareArrays(this._a, (this._a[7] ? moment.utc(this) : this).toArray());
         
     | 
| 
      
 859 
     | 
    
         
            +
                        }
         
     | 
| 
      
 860 
     | 
    
         
            +
                        return !isNaN(this._d.getTime());
         
     | 
| 
      
 861 
     | 
    
         
            +
                    },
         
     | 
| 
      
 862 
     | 
    
         
            +
             
     | 
| 
       727 
863 
     | 
    
         
             
                    utc : function () {
         
     | 
| 
       728 
864 
     | 
    
         
             
                        this._isUTC = true;
         
     | 
| 
       729 
865 
     | 
    
         
             
                        return this;
         
     | 
| 
         @@ -774,7 +910,7 @@ 
     | 
|
| 
       774 
910 
     | 
    
         
             
                    },
         
     | 
| 
       775 
911 
     | 
    
         | 
| 
       776 
912 
     | 
    
         
             
                    from : function (time, withoutSuffix) {
         
     | 
| 
       777 
     | 
    
         
            -
                        return moment.duration(this.diff(time)).humanize(!withoutSuffix);
         
     | 
| 
      
 913 
     | 
    
         
            +
                        return moment.duration(this.diff(time)).lang(this._lang).humanize(!withoutSuffix);
         
     | 
| 
       778 
914 
     | 
    
         
             
                    },
         
     | 
| 
       779 
915 
     | 
    
         | 
| 
       780 
916 
     | 
    
         
             
                    fromNow : function (withoutSuffix) {
         
     | 
| 
         @@ -783,7 +919,7 @@ 
     | 
|
| 
       783 
919 
     | 
    
         | 
| 
       784 
920 
     | 
    
         
             
                    calendar : function () {
         
     | 
| 
       785 
921 
     | 
    
         
             
                        var diff = this.diff(moment().sod(), 'days', true),
         
     | 
| 
       786 
     | 
    
         
            -
                            calendar =  
     | 
| 
      
 922 
     | 
    
         
            +
                            calendar = this.lang().calendar,
         
     | 
| 
       787 
923 
     | 
    
         
             
                            allElse = calendar.sameElse,
         
     | 
| 
       788 
924 
     | 
    
         
             
                            format = diff < -6 ? allElse :
         
     | 
| 
       789 
925 
     | 
    
         
             
                            diff < -1 ? calendar.lastWeek :
         
     | 
| 
         @@ -810,20 +946,43 @@ 
     | 
|
| 
       810 
946 
     | 
    
         
             
                            this.add({ d : input - day });
         
     | 
| 
       811 
947 
     | 
    
         
             
                    },
         
     | 
| 
       812 
948 
     | 
    
         | 
| 
      
 949 
     | 
    
         
            +
                    startOf: function (val) {
         
     | 
| 
      
 950 
     | 
    
         
            +
                        // the following switch intentionally omits break keywords
         
     | 
| 
      
 951 
     | 
    
         
            +
                        // to utilize falling through the cases.
         
     | 
| 
      
 952 
     | 
    
         
            +
                        switch (val.replace(/s$/, '')) {
         
     | 
| 
      
 953 
     | 
    
         
            +
                        case 'year':
         
     | 
| 
      
 954 
     | 
    
         
            +
                            this.month(0);
         
     | 
| 
      
 955 
     | 
    
         
            +
                            /* falls through */
         
     | 
| 
      
 956 
     | 
    
         
            +
                        case 'month':
         
     | 
| 
      
 957 
     | 
    
         
            +
                            this.date(1);
         
     | 
| 
      
 958 
     | 
    
         
            +
                            /* falls through */
         
     | 
| 
      
 959 
     | 
    
         
            +
                        case 'day':
         
     | 
| 
      
 960 
     | 
    
         
            +
                            this.hours(0);
         
     | 
| 
      
 961 
     | 
    
         
            +
                            /* falls through */
         
     | 
| 
      
 962 
     | 
    
         
            +
                        case 'hour':
         
     | 
| 
      
 963 
     | 
    
         
            +
                            this.minutes(0);
         
     | 
| 
      
 964 
     | 
    
         
            +
                            /* falls through */
         
     | 
| 
      
 965 
     | 
    
         
            +
                        case 'minute':
         
     | 
| 
      
 966 
     | 
    
         
            +
                            this.seconds(0);
         
     | 
| 
      
 967 
     | 
    
         
            +
                            /* falls through */
         
     | 
| 
      
 968 
     | 
    
         
            +
                        case 'second':
         
     | 
| 
      
 969 
     | 
    
         
            +
                            this.milliseconds(0);
         
     | 
| 
      
 970 
     | 
    
         
            +
                            /* falls through */
         
     | 
| 
      
 971 
     | 
    
         
            +
                        }
         
     | 
| 
      
 972 
     | 
    
         
            +
                        return this;
         
     | 
| 
      
 973 
     | 
    
         
            +
                    },
         
     | 
| 
      
 974 
     | 
    
         
            +
             
     | 
| 
      
 975 
     | 
    
         
            +
                    endOf: function (val) {
         
     | 
| 
      
 976 
     | 
    
         
            +
                        return this.startOf(val).add(val.replace(/s?$/, 's'), 1).subtract('ms', 1);
         
     | 
| 
      
 977 
     | 
    
         
            +
                    },
         
     | 
| 
      
 978 
     | 
    
         
            +
                    
         
     | 
| 
       813 
979 
     | 
    
         
             
                    sod: function () {
         
     | 
| 
       814 
     | 
    
         
            -
                        return  
     | 
| 
       815 
     | 
    
         
            -
                            .hours(0)
         
     | 
| 
       816 
     | 
    
         
            -
                            .minutes(0)
         
     | 
| 
       817 
     | 
    
         
            -
                            .seconds(0)
         
     | 
| 
       818 
     | 
    
         
            -
                            .milliseconds(0);
         
     | 
| 
      
 980 
     | 
    
         
            +
                        return this.clone().startOf('day');
         
     | 
| 
       819 
981 
     | 
    
         
             
                    },
         
     | 
| 
       820 
982 
     | 
    
         | 
| 
       821 
983 
     | 
    
         
             
                    eod: function () {
         
     | 
| 
       822 
984 
     | 
    
         
             
                        // end of day = start of day plus 1 day, minus 1 millisecond
         
     | 
| 
       823 
     | 
    
         
            -
                        return this. 
     | 
| 
       824 
     | 
    
         
            -
                            d : 1,
         
     | 
| 
       825 
     | 
    
         
            -
                            ms : -1
         
     | 
| 
       826 
     | 
    
         
            -
                        });
         
     | 
| 
      
 985 
     | 
    
         
            +
                        return this.clone().endOf('day');
         
     | 
| 
       827 
986 
     | 
    
         
             
                    },
         
     | 
| 
       828 
987 
     | 
    
         | 
| 
       829 
988 
     | 
    
         
             
                    zone : function () {
         
     | 
| 
         @@ -831,7 +990,19 @@ 
     | 
|
| 
       831 
990 
     | 
    
         
             
                    },
         
     | 
| 
       832 
991 
     | 
    
         | 
| 
       833 
992 
     | 
    
         
             
                    daysInMonth : function () {
         
     | 
| 
       834 
     | 
    
         
            -
                        return moment(this 
     | 
| 
      
 993 
     | 
    
         
            +
                        return moment.utc([this.year(), this.month() + 1, 0]).date();
         
     | 
| 
      
 994 
     | 
    
         
            +
                    },
         
     | 
| 
      
 995 
     | 
    
         
            +
             
     | 
| 
      
 996 
     | 
    
         
            +
                    // If passed a language key, it will set the language for this
         
     | 
| 
      
 997 
     | 
    
         
            +
                    // instance.  Otherwise, it will return the language configuration
         
     | 
| 
      
 998 
     | 
    
         
            +
                    // variables for this instance.
         
     | 
| 
      
 999 
     | 
    
         
            +
                    lang : function (lang) {
         
     | 
| 
      
 1000 
     | 
    
         
            +
                        if (lang === undefined) {
         
     | 
| 
      
 1001 
     | 
    
         
            +
                            return getLangDefinition(this);
         
     | 
| 
      
 1002 
     | 
    
         
            +
                        } else {
         
     | 
| 
      
 1003 
     | 
    
         
            +
                            this._lang = lang;
         
     | 
| 
      
 1004 
     | 
    
         
            +
                            return this;
         
     | 
| 
      
 1005 
     | 
    
         
            +
                        }
         
     | 
| 
       835 
1006 
     | 
    
         
             
                    }
         
     | 
| 
       836 
1007 
     | 
    
         
             
                };
         
     | 
| 
       837 
1008 
     | 
    
         | 
| 
         @@ -856,6 +1027,12 @@ 
     | 
|
| 
       856 
1027 
     | 
    
         
             
                // add shortcut for year (uses different syntax than the getter/setter 'year' == 'FullYear')
         
     | 
| 
       857 
1028 
     | 
    
         
             
                makeGetterAndSetter('year', 'FullYear');
         
     | 
| 
       858 
1029 
     | 
    
         | 
| 
      
 1030 
     | 
    
         
            +
             
     | 
| 
      
 1031 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 1032 
     | 
    
         
            +
                    Duration Prototype
         
     | 
| 
      
 1033 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 1034 
     | 
    
         
            +
             
     | 
| 
      
 1035 
     | 
    
         
            +
             
     | 
| 
       859 
1036 
     | 
    
         
             
                moment.duration.fn = Duration.prototype = {
         
     | 
| 
       860 
1037 
     | 
    
         
             
                    weeks : function () {
         
     | 
| 
       861 
1038 
     | 
    
         
             
                        return absRound(this.days() / 7);
         
     | 
| 
         @@ -869,15 +1046,17 @@ 
     | 
|
| 
       869 
1046 
     | 
    
         | 
| 
       870 
1047 
     | 
    
         
             
                    humanize : function (withSuffix) {
         
     | 
| 
       871 
1048 
     | 
    
         
             
                        var difference = +this,
         
     | 
| 
       872 
     | 
    
         
            -
                            rel =  
     | 
| 
       873 
     | 
    
         
            -
                            output = relativeTime(difference, !withSuffix);
         
     | 
| 
      
 1049 
     | 
    
         
            +
                            rel = this.lang().relativeTime,
         
     | 
| 
      
 1050 
     | 
    
         
            +
                            output = relativeTime(difference, !withSuffix, this.lang());
         
     | 
| 
       874 
1051 
     | 
    
         | 
| 
       875 
1052 
     | 
    
         
             
                        if (withSuffix) {
         
     | 
| 
       876 
1053 
     | 
    
         
             
                            output = (difference <= 0 ? rel.past : rel.future).replace(/%s/i, output);
         
     | 
| 
       877 
1054 
     | 
    
         
             
                        }
         
     | 
| 
       878 
1055 
     | 
    
         | 
| 
       879 
1056 
     | 
    
         
             
                        return output;
         
     | 
| 
       880 
     | 
    
         
            -
                    }
         
     | 
| 
      
 1057 
     | 
    
         
            +
                    },
         
     | 
| 
      
 1058 
     | 
    
         
            +
             
     | 
| 
      
 1059 
     | 
    
         
            +
                    lang : moment.fn.lang
         
     | 
| 
       881 
1060 
     | 
    
         
             
                };
         
     | 
| 
       882 
1061 
     | 
    
         | 
| 
       883 
1062 
     | 
    
         
             
                function makeDurationGetter(name) {
         
     | 
| 
         @@ -901,13 +1080,22 @@ 
     | 
|
| 
       901 
1080 
     | 
    
         | 
| 
       902 
1081 
     | 
    
         
             
                makeDurationAsGetter('Weeks', 6048e5);
         
     | 
| 
       903 
1082 
     | 
    
         | 
| 
      
 1083 
     | 
    
         
            +
             
     | 
| 
      
 1084 
     | 
    
         
            +
                /************************************
         
     | 
| 
      
 1085 
     | 
    
         
            +
                    Exposing Moment
         
     | 
| 
      
 1086 
     | 
    
         
            +
                ************************************/
         
     | 
| 
      
 1087 
     | 
    
         
            +
             
     | 
| 
      
 1088 
     | 
    
         
            +
             
     | 
| 
       904 
1089 
     | 
    
         
             
                // CommonJS module is defined
         
     | 
| 
       905 
1090 
     | 
    
         
             
                if (hasModule) {
         
     | 
| 
       906 
1091 
     | 
    
         
             
                    module.exports = moment;
         
     | 
| 
       907 
1092 
     | 
    
         
             
                }
         
     | 
| 
       908 
1093 
     | 
    
         
             
                /*global ender:false */
         
     | 
| 
       909 
     | 
    
         
            -
                if (typeof  
     | 
| 
       910 
     | 
    
         
            -
                    window 
     | 
| 
      
 1094 
     | 
    
         
            +
                if (typeof ender === 'undefined') {
         
     | 
| 
      
 1095 
     | 
    
         
            +
                    // here, `this` means `window` in the browser, or `global` on the server
         
     | 
| 
      
 1096 
     | 
    
         
            +
                    // add `moment` as a global object via a string identifier,
         
     | 
| 
      
 1097 
     | 
    
         
            +
                    // for Closure Compiler "advanced" mode
         
     | 
| 
      
 1098 
     | 
    
         
            +
                    this['moment'] = moment;
         
     | 
| 
       911 
1099 
     | 
    
         
             
                }
         
     | 
| 
       912 
1100 
     | 
    
         
             
                /*global define:false */
         
     | 
| 
       913 
1101 
     | 
    
         
             
                if (typeof define === "function" && define.amd) {
         
     | 
| 
         @@ -915,4 +1103,4 @@ 
     | 
|
| 
       915 
1103 
     | 
    
         
             
                        return moment;
         
     | 
| 
       916 
1104 
     | 
    
         
             
                    });
         
     | 
| 
       917 
1105 
     | 
    
         
             
                }
         
     | 
| 
       918 
     | 
    
         
            -
            })(Date);
         
     | 
| 
      
 1106 
     | 
    
         
            +
            }).call(this, Date);
         
     |