]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Enable weekdaysParseExact locale flag to fix weekday parsing on some locales
authorIskren Chernev <iskren.chernev@gmail.com>
Mon, 4 Apr 2016 09:45:07 +0000 (02:45 -0700)
committerIskren Chernev <iskren.chernev@gmail.com>
Sat, 16 Apr 2016 05:45:16 +0000 (22:45 -0700)
41 files changed:
src/lib/locale/prototype.js
src/lib/units/day-of-week.js
src/locale/ar-ma.js
src/locale/ar-sa.js
src/locale/ar-tn.js
src/locale/ar.js
src/locale/az.js
src/locale/br.js
src/locale/bs.js
src/locale/ca.js
src/locale/cy.js
src/locale/de-at.js
src/locale/de.js
src/locale/es.js
src/locale/eu.js
src/locale/fa.js
src/locale/fr-ca.js
src/locale/fr-ch.js
src/locale/fr.js
src/locale/fy.js
src/locale/gl.js
src/locale/hr.js
src/locale/lb.js
src/locale/lo.js
src/locale/lt.js
src/locale/lv.js
src/locale/me.js
src/locale/nb.js
src/locale/ne.js
src/locale/nl.js
src/locale/pt-br.js
src/locale/pt.js
src/locale/si.js
src/locale/sl.js
src/locale/sq.js
src/locale/sr-cyrl.js
src/locale/sr.js
src/locale/sw.js
src/locale/th.js
src/locale/vi.js
src/test/helpers/common-locale.js

index bb27ad00857a3e30f601b1a18b237ca673009c01..fd1345868c9166b465268ecbd99f30fdde72cb1c 100644 (file)
@@ -57,7 +57,11 @@ import {
     localeWeekdaysParse,
     defaultLocaleWeekdays,      localeWeekdays,
     defaultLocaleWeekdaysMin,   localeWeekdaysMin,
-    defaultLocaleWeekdaysShort, localeWeekdaysShort
+    defaultLocaleWeekdaysShort, localeWeekdaysShort,
+
+    defaultWeekdaysRegex, weekdaysRegex,
+    defaultWeekdaysShortRegex, weekdaysShortRegex,
+    defaultWeekdaysMinRegex, weekdaysMinRegex
 } from '../units/day-of-week';
 
 proto.weekdays       =        localeWeekdays;
@@ -68,6 +72,13 @@ proto.weekdaysShort  =        localeWeekdaysShort;
 proto._weekdaysShort = defaultLocaleWeekdaysShort;
 proto.weekdaysParse  =        localeWeekdaysParse;
 
+proto._weekdaysRegex      = defaultWeekdaysRegex;
+proto.weekdaysRegex       =        weekdaysRegex;
+proto._weekdaysShortRegex = defaultWeekdaysShortRegex;
+proto.weekdaysShortRegex  =        weekdaysShortRegex;
+proto._weekdaysMinRegex   = defaultWeekdaysMinRegex;
+proto.weekdaysMinRegex    =        weekdaysMinRegex;
+
 // Hours
 import { localeIsPM, defaultLocaleMeridiemParse, localeMeridiem } from '../units/hour';
 
index 2f0460a1f88ebbe80654020cb88e5c662cfd9b37..18e2a42ba10b074561790729874066136a5de42c 100644 (file)
@@ -1,10 +1,12 @@
 import { addFormatToken } from '../format/format';
 import { addUnitAlias } from './aliases';
-import { addRegexToken, match1to2, matchWord } from '../parse/regex';
+import { addRegexToken, match1to2, matchWord, regexEscape } from '../parse/regex';
 import { addWeekParseToken } from '../parse/token';
 import toInt from '../utils/to-int';
 import isArray from '../utils/is-array';
-import { createLocal } from '../create/local';
+import indexOf from '../utils/index-of';
+import hasOwnProp from '../utils/has-own-prop';
+import { createUTC } from '../create/utc';
 import getParsingFlags from '../create/parsing-flags';
 
 // FORMATTING
@@ -37,9 +39,15 @@ addUnitAlias('isoWeekday', 'E');
 addRegexToken('d',    match1to2);
 addRegexToken('e',    match1to2);
 addRegexToken('E',    match1to2);
-addRegexToken('dd',   matchWord);
-addRegexToken('ddd',  matchWord);
-addRegexToken('dddd', matchWord);
+addRegexToken('dd',   function (isStrict, locale) {
+    return locale.weekdaysMinRegex(isStrict);
+});
+addRegexToken('ddd',   function (isStrict, locale) {
+    return locale.weekdaysShortRegex(isStrict);
+});
+addRegexToken('dddd',   function (isStrict, locale) {
+    return locale.weekdaysRegex(isStrict);
+});
 
 addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
     var weekday = config._locale.weekdaysParse(input, token, config._strict);
@@ -92,9 +100,77 @@ export function localeWeekdaysMin (m) {
     return this._weekdaysMin[m.day()];
 }
 
+function handleStrictParse(weekdayName, format, strict) {
+    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+    if (!this._weekdaysParse) {
+        this._weekdaysParse = [];
+        this._shortWeekdaysParse = [];
+        this._minWeekdaysParse = [];
+
+        for (i = 0; i < 7; ++i) {
+            mom = createUTC([2000, 1]).day(i);
+            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+        }
+    }
+
+    if (strict) {
+        if (format === 'dddd') {
+            ii = indexOf.call(this._weekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else if (format === 'ddd') {
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else {
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        }
+    } else {
+        if (format === 'dddd') {
+            ii = indexOf.call(this._weekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else if (format === 'ddd') {
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._weekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else {
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._weekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        }
+    }
+}
+
 export function localeWeekdaysParse (weekdayName, format, strict) {
     var i, mom, regex;
 
+    if (this._weekdaysParseExact) {
+        return handleStrictParse.call(this, weekdayName, format, strict);
+    }
+
     if (!this._weekdaysParse) {
         this._weekdaysParse = [];
         this._minWeekdaysParse = [];
@@ -105,7 +181,7 @@ export function localeWeekdaysParse (weekdayName, format, strict) {
     for (i = 0; i < 7; i++) {
         // make the regex if we don't have it already
 
-        mom = createLocal([2000, 1]).day(i);
+        mom = createUTC([2000, 1]).day(i);
         if (strict && !this._fullWeekdaysParse[i]) {
             this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
             this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
@@ -160,3 +236,96 @@ export function getSetISODayOfWeek (input) {
     // as a setter, sunday should belong to the previous week.
     return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
 }
+
+export var defaultWeekdaysRegex = matchWord;
+export function weekdaysRegex (isStrict) {
+    if (this._weekdaysParseExact) {
+        if (!hasOwnProp(this, '_weekdaysRegex')) {
+            computeWeekdaysParse.call(this);
+        }
+        if (isStrict) {
+            return this._weekdaysStrictRegex;
+        } else {
+            return this._weekdaysRegex;
+        }
+    } else {
+        return this._weekdaysStrictRegex && isStrict ?
+            this._weekdaysStrictRegex : this._weekdaysRegex;
+    }
+}
+
+export var defaultWeekdaysShortRegex = matchWord;
+export function weekdaysShortRegex (isStrict) {
+    if (this._weekdaysParseExact) {
+        if (!hasOwnProp(this, '_weekdaysRegex')) {
+            computeWeekdaysParse.call(this);
+        }
+        if (isStrict) {
+            return this._weekdaysShortStrictRegex;
+        } else {
+            return this._weekdaysShortRegex;
+        }
+    } else {
+        return this._weekdaysShortStrictRegex && isStrict ?
+            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+    }
+}
+
+export var defaultWeekdaysMinRegex = matchWord;
+export function weekdaysMinRegex (isStrict) {
+    if (this._weekdaysParseExact) {
+        if (!hasOwnProp(this, '_weekdaysRegex')) {
+            computeWeekdaysParse.call(this);
+        }
+        if (isStrict) {
+            return this._weekdaysMinStrictRegex;
+        } else {
+            return this._weekdaysMinRegex;
+        }
+    } else {
+        return this._weekdaysMinStrictRegex && isStrict ?
+            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+    }
+}
+
+
+function computeWeekdaysParse () {
+    function cmpLenRev(a, b) {
+        return b.length - a.length;
+    }
+
+    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+        i, mom, minp, shortp, longp;
+    for (i = 0; i < 7; i++) {
+        // make the regex if we don't have it already
+        mom = createUTC([2000, 1]).day(i);
+        minp = this.weekdaysMin(mom, '');
+        shortp = this.weekdaysShort(mom, '');
+        longp = this.weekdays(mom, '');
+        minPieces.push(minp);
+        shortPieces.push(shortp);
+        longPieces.push(longp);
+        mixedPieces.push(minp);
+        mixedPieces.push(shortp);
+        mixedPieces.push(longp);
+    }
+    // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+    // will match the longer piece.
+    minPieces.sort(cmpLenRev);
+    shortPieces.sort(cmpLenRev);
+    longPieces.sort(cmpLenRev);
+    mixedPieces.sort(cmpLenRev);
+    for (i = 0; i < 7; i++) {
+        shortPieces[i] = regexEscape(shortPieces[i]);
+        longPieces[i] = regexEscape(longPieces[i]);
+        mixedPieces[i] = regexEscape(mixedPieces[i]);
+    }
+
+    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+    this._weekdaysShortRegex = this._weekdaysRegex;
+    this._weekdaysMinRegex = this._weekdaysRegex;
+
+    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+}
index fe79651b0180cb3c29f4e7b48b001c17924e66d7..efd39b46cb84f14cdb7e2ed77240f626d445e5fc 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('ar-ma', {
     weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
     weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index d32b0cead2541b8c674b86b36b4f1487066aed72..201b264f247d00fc9055a83cf8f7e427480bacb6 100644 (file)
@@ -34,6 +34,7 @@ export default moment.defineLocale('ar-sa', {
     weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
     weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 5dd0edba64c733d62451365b71fe4f473605ea45..98709c6f3667c9661372da3527c03c50a49860f1 100644 (file)
@@ -9,6 +9,7 @@ export default moment.defineLocale('ar-tn', {
     weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
     weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
     weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat: {
         LT: 'HH:mm',
         LTS: 'HH:mm:ss',
index e8555a0880e454f2f7dd9711711049a37eb4a3c1..4cdcdc265e27b2c044fd95f931efd2230e60a840 100644 (file)
@@ -67,6 +67,7 @@ export default moment.defineLocale('ar', {
     weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
     weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
     weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index b30c12d8a4bab6bef5ab4542b1f5d83a2e9041ec..d26ade9a8aec2ba70cf3a789f23c7d6fa7e9355e 100644 (file)
@@ -31,6 +31,7 @@ export default moment.defineLocale('az', {
     weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
     weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
     weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index f95afb381824e40ec0860c8853466e309d99d43c..36d1e00610835694b79c737b51979d3f4a1b1c79 100644 (file)
@@ -54,6 +54,7 @@ export default moment.defineLocale('br', {
     weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
     weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
     weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'h[e]mm A',
         LTS : 'h[e]mm:ss A',
index 0b760751e4d034f3bd44b01589a004016de0aaf2..c1abbe9c879274cb19177238c677c1a2488f4bf0 100644 (file)
@@ -65,6 +65,7 @@ export default moment.defineLocale('bs', {
     weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
     weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
     weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'H:mm',
         LTS : 'H:mm:ss',
index 075b09ee015d0b431e8472cf46fa670ae3fff3e6..6e5a793df93278f37a96cbf00812bcf0d8045e36 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('ca', {
     weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
     weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
     weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'H:mm',
         LTS : 'H:mm:ss',
index b674ba42e63f6b5224ef941d0acdd6a0bdce2eca..93c8c853d5631f22538c1032f6deca9f8c3137ea 100644 (file)
@@ -10,6 +10,7 @@ export default moment.defineLocale('cy', {
     weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
     weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
     weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+    weekdaysParseExact : true,
     // time formats are the same as en-gb
     longDateFormat: {
         LT: 'HH:mm',
index 92859de11c6c81176985068abe8d67aa24df23d1..5207b7964c6d091e2de81a559941d3bdca0619f2 100644 (file)
@@ -28,6 +28,7 @@ export default moment.defineLocale('de-at', {
     weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
     weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
     weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT: 'HH:mm',
         LTS: 'HH:mm:ss',
index ab3402d4286b01e0367c4c09516e693d55c8f4cc..9230536d34acae1a58058f7a57d9b79bdd3dce9e 100644 (file)
@@ -27,6 +27,7 @@ export default moment.defineLocale('de', {
     weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
     weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
     weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT: 'HH:mm',
         LTS: 'HH:mm:ss',
index 31b3943991d5988721fb025d2ed31c2f0c66ca51..6a5fe48055485577d758c871d2be20fff29b1130 100644 (file)
@@ -20,6 +20,7 @@ export default moment.defineLocale('es', {
     weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
     weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
     weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'H:mm',
         LTS : 'H:mm:ss',
index d54748be3a40cc63564600f3d1d37fc8bbfe4679..0302f2d92f88139fcc8581dad187f14bcb5339a5 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('eu', {
     weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
     weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
     weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 96e670ba0ffd1a2a61246284a37ffb7bba0b17f4..0a9d92cce621bb34d6f6e330ad3f4225e7aa0cea 100644 (file)
@@ -34,6 +34,7 @@ export default moment.defineLocale('fa', {
     weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
     weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
     weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 5598aabb2281f454695212001239a3b233814ea5..518081ec0f03a3778eafbd07b534b1b043dc7d23 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('fr-ca', {
     weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
     weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
     weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 812bf14fdbc070276f0292ed7afa8c67ca119ad4..f4991589a06f38a6c279e204103f4b265387965b 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('fr-ch', {
     weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
     weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
     weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index eae2dfbedead631e2f930888067d7af473952102..3ff1c4b5abfd08da45b5b67f1b378aee5c5256df 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('fr', {
     weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
     weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
     weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 1bd6564bf58d9f4d7cf687564fe26a922ca5a701..b84dbbe7dea872365107fb3e80849525c83a0daa 100644 (file)
@@ -20,6 +20,7 @@ export default moment.defineLocale('fy', {
     weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
     weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
     weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index d0288cb1d1cfa43b9c39ab8aa9aa0c5d8c3a80e9..bdccae922f471defb04ce8444452d1790a71bc56 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('gl', {
     weekdays : 'Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado'.split('_'),
     weekdaysShort : 'Dom._Lun._Mar._Mér._Xov._Ven._Sáb.'.split('_'),
     weekdaysMin : 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'H:mm',
         LTS : 'H:mm:ss',
index b5426f1f70a4e92dff48e2d521f417d6af5d1a1c..7c41712caea6fe8155beeac0a63dd67f1c582b7d 100644 (file)
@@ -67,6 +67,7 @@ export default moment.defineLocale('hr', {
     weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
     weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
     weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'H:mm',
         LTS : 'H:mm:ss',
index fcb5c1f8bcb5a4db1f173fc9cf88ca15b36c5537..55676e7990c745e056f3fb60300fd91be7594062 100644 (file)
@@ -76,6 +76,7 @@ export default moment.defineLocale('lb', {
     weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
     weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
     weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat: {
         LT: 'H:mm [Auer]',
         LTS: 'H:mm:ss [Auer]',
index aed4f46c44506cd32d23546363addb9dd29a2046..34d7452148b8b1f3e673a4b6d0ee1ed149fe19d1 100644 (file)
@@ -10,6 +10,7 @@ export default moment.defineLocale('lo', {
     weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
     weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
     weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 81e7e81f140a5fb1ca6624d389b0f3591f66ff3f..b2900db24cabc99840692310a08d901cc5aea2d1 100644 (file)
@@ -59,6 +59,7 @@ export default moment.defineLocale('lt', {
     },
     weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
     weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 53aec40ded705c70c0c5856aaeb5665d2b3b877a..1ff0817bd460ce9d8d6179e916cc2f0cefb9f90e 100644 (file)
@@ -46,6 +46,7 @@ export default moment.defineLocale('lv', {
     weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
     weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
     weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index dd6bf3100d3d85a43ea68b638a0e7bbc3545f78d..41e595992d7ba5715ca0cc7c509917146f6ae9c8 100644 (file)
@@ -28,12 +28,13 @@ var translator = {
 };
 
 export default moment.defineLocale('me', {
-    months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
-    monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
+    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
     monthsParseExact : true,
-    weekdays: ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],
-    weekdaysShort: ['ned.', 'pon.', 'uto.', 'sri.', 'čet.', 'pet.', 'sub.'],
-    weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
+    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat: {
         LT: 'H:mm',
         LTS : 'H:mm:ss',
index 60b2f4d637f57230f884a7663c3baeedb094538f..6b06c7245be74519edf29c37777308880db92be2 100644 (file)
@@ -12,6 +12,7 @@ export default moment.defineLocale('nb', {
     weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
     weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
     weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 07132bd5c1d8980bd88def9e2d2d610d8cfa92f6..76dd1a2329d6dbcfce5e91e93ac9fa87dd7863ac 100644 (file)
@@ -36,6 +36,7 @@ export default moment.defineLocale('ne', {
     weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
     weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
     weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'Aको h:mm बजे',
         LTS : 'Aको h:mm:ss बजे',
index 299968944050033c166e4026f461c84d62b88b13..1c6be4daf41e72915e819917c3933786a0572f8d 100644 (file)
@@ -20,6 +20,7 @@ export default moment.defineLocale('nl', {
     weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
     weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
     weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 56e4d53ee440d644e8ce008b9732d84b32b8ac58..50748fb0e2465394b258f239f0d0260040a24478 100644 (file)
@@ -10,6 +10,7 @@ export default moment.defineLocale('pt-br', {
     weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
     weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
     weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 0a38d468b7e609b6d0d171ef0343f41c6f2e9431..db3ba6488bcfc3ce1d210a8f631a0973ddd746a4 100644 (file)
@@ -10,6 +10,7 @@ export default moment.defineLocale('pt', {
     weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
     weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
     weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index c2d8a88fa238131018f6476347c23138810cd8c6..10c728faaa199cf695f11e863a71b21882a4f2aa 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('si', {
     weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
     weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
     weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'a h:mm',
         LTS : 'a h:mm:ss',
index 951e3e6d82ae88a5615c4880341a109e8ef98d96..36b0e2ebb603f317407446d248e134222b822bca 100644 (file)
@@ -82,6 +82,7 @@ export default moment.defineLocale('sl', {
     weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
     weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
     weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'H:mm',
         LTS : 'H:mm:ss',
index d8a9c023443c93312b01612df0194875b295384d..c5aeac3e1ed9fe3adc70cbc15a12ab17891209d5 100644 (file)
@@ -12,6 +12,7 @@ export default moment.defineLocale('sq', {
     weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
     weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
     weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+    weekdaysParseExact : true,
     meridiemParse: /PD|MD/,
     isPM: function (input) {
         return input.charAt(0) === 'M';
index 92bad84d2c65118c976464a7796c8a1b9b5164d6..af2a84d20ac64fa182bcb17e820832a536602678 100644 (file)
@@ -28,12 +28,13 @@ var translator = {
 };
 
 export default moment.defineLocale('sr-cyrl', {
-    months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
-    monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
+    months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
+    monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
     monthsParseExact: true,
-    weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
-    weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
-    weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
+    weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+    weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+    weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat: {
         LT: 'H:mm',
         LTS : 'H:mm:ss',
index f338c762362acff61e999aa60e051dd633f6a846..46fc74966e9554bc184a43c005940a2692b50e89 100644 (file)
@@ -28,12 +28,13 @@ var translator = {
 };
 
 export default moment.defineLocale('sr', {
-    months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
-    monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
+    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
     monthsParseExact: true,
-    weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],
-    weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'],
-    weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
+    weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
+    weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat: {
         LT: 'H:mm',
         LTS : 'H:mm:ss',
index 0b7ae92123488bc11a11e658629cf30be117c48b..06850d6f77fd38ac97064fa6ffb4e5c7d3b66965 100644 (file)
@@ -10,6 +10,7 @@ export default moment.defineLocale('sw', {
     weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
     weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
     weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'HH:mm',
         LTS : 'HH:mm:ss',
index 9437da8076fb9892ee98f189f9d76f00bb3f66bf..107e0a94b4a5e66fc0658edae4a314b06b1be5f0 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('th', {
     weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
     weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
     weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+    weekdaysParseExact : true,
     longDateFormat : {
         LT : 'H นาฬิกา m นาที',
         LTS : 'H นาฬิกา m นาที s วินาที',
index 116aca48efb6797fe664e34597ab6e689a2f05af..34cc18d1ee37a8e171427564774394a34f39fc76 100644 (file)
@@ -11,6 +11,7 @@ export default moment.defineLocale('vi', {
     weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
     weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
     weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+    weekdaysParseExact : true,
     meridiemParse: /sa|ch/i,
     isPM : function (input) {
         return /^ch$/i.test(input);
index 5114fb72a3ec7661fc1b8f58d7112801d11a93d5..d641e0438cde833f3ccc3a6eb03ef992f2383cb4 100644 (file)
@@ -99,7 +99,41 @@ export function defineCommonLocaleTests(locale, options) {
             tester('MMM');
             tester('MMM.');
             tester('MMMM');
-            // tester('MMMM.');
+            tester('MMMM.');
+        }
+    });
+
+    test('weekday parsing correctness', function (assert) {
+        var i, m;
+
+        if (locale === 'tr' || locale === 'az') {
+            // There is a lower-case letter (ı), that converted to upper then
+            // lower changes to i
+            expect(0);
+            return;
+        }
+        function tester(format) {
+            var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format;
+            r = moment(m.format(format), format);
+            assert.equal(r.weekday(), m.weekday(), baseMsg);
+            r = moment(m.format(format).toLocaleUpperCase(), format);
+            assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+            r = moment(m.format(format).toLocaleLowerCase(), format);
+            assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+            r = moment(m.format(format), format, true);
+            assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+            r = moment(m.format(format).toLocaleUpperCase(), format, true);
+            assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+            r = moment(m.format(format).toLocaleLowerCase(), format, true);
+            assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+        }
+
+        for (i = 0; i < 7; ++i) {
+            m = moment.utc([2015, i, 15, 18]);
+            tester('dd');
+            tester('ddd');
+            tester('dddd');
         }
     });
 }