From: Iskren Chernev Date: Mon, 4 Apr 2016 09:45:07 +0000 (-0700) Subject: Enable weekdaysParseExact locale flag to fix weekday parsing on some locales X-Git-Tag: 2.13.0~31^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6900cca22fe5c4abcbe22259903df25f0fb20b6d;p=thirdparty%2Fmoment.git Enable weekdaysParseExact locale flag to fix weekday parsing on some locales --- diff --git a/src/lib/locale/prototype.js b/src/lib/locale/prototype.js index bb27ad008..fd1345868 100644 --- a/src/lib/locale/prototype.js +++ b/src/lib/locale/prototype.js @@ -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'; diff --git a/src/lib/units/day-of-week.js b/src/lib/units/day-of-week.js index 2f0460a1f..18e2a42ba 100644 --- a/src/lib/units/day-of-week.js +++ b/src/lib/units/day-of-week.js @@ -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'); +} diff --git a/src/locale/ar-ma.js b/src/locale/ar-ma.js index fe79651b0..efd39b46c 100644 --- a/src/locale/ar-ma.js +++ b/src/locale/ar-ma.js @@ -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', diff --git a/src/locale/ar-sa.js b/src/locale/ar-sa.js index d32b0cead..201b264f2 100644 --- a/src/locale/ar-sa.js +++ b/src/locale/ar-sa.js @@ -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', diff --git a/src/locale/ar-tn.js b/src/locale/ar-tn.js index 5dd0edba6..98709c6f3 100644 --- a/src/locale/ar-tn.js +++ b/src/locale/ar-tn.js @@ -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', diff --git a/src/locale/ar.js b/src/locale/ar.js index e8555a088..4cdcdc265 100644 --- a/src/locale/ar.js +++ b/src/locale/ar.js @@ -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', diff --git a/src/locale/az.js b/src/locale/az.js index b30c12d8a..d26ade9a8 100644 --- a/src/locale/az.js +++ b/src/locale/az.js @@ -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', diff --git a/src/locale/br.js b/src/locale/br.js index f95afb381..36d1e0061 100644 --- a/src/locale/br.js +++ b/src/locale/br.js @@ -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', diff --git a/src/locale/bs.js b/src/locale/bs.js index 0b760751e..c1abbe9c8 100644 --- a/src/locale/bs.js +++ b/src/locale/bs.js @@ -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', diff --git a/src/locale/ca.js b/src/locale/ca.js index 075b09ee0..6e5a793df 100644 --- a/src/locale/ca.js +++ b/src/locale/ca.js @@ -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', diff --git a/src/locale/cy.js b/src/locale/cy.js index b674ba42e..93c8c853d 100644 --- a/src/locale/cy.js +++ b/src/locale/cy.js @@ -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', diff --git a/src/locale/de-at.js b/src/locale/de-at.js index 92859de11..5207b7964 100644 --- a/src/locale/de-at.js +++ b/src/locale/de-at.js @@ -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', diff --git a/src/locale/de.js b/src/locale/de.js index ab3402d42..9230536d3 100644 --- a/src/locale/de.js +++ b/src/locale/de.js @@ -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', diff --git a/src/locale/es.js b/src/locale/es.js index 31b394399..6a5fe4805 100644 --- a/src/locale/es.js +++ b/src/locale/es.js @@ -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', diff --git a/src/locale/eu.js b/src/locale/eu.js index d54748be3..0302f2d92 100644 --- a/src/locale/eu.js +++ b/src/locale/eu.js @@ -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', diff --git a/src/locale/fa.js b/src/locale/fa.js index 96e670ba0..0a9d92cce 100644 --- a/src/locale/fa.js +++ b/src/locale/fa.js @@ -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', diff --git a/src/locale/fr-ca.js b/src/locale/fr-ca.js index 5598aabb2..518081ec0 100644 --- a/src/locale/fr-ca.js +++ b/src/locale/fr-ca.js @@ -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', diff --git a/src/locale/fr-ch.js b/src/locale/fr-ch.js index 812bf14fd..f4991589a 100644 --- a/src/locale/fr-ch.js +++ b/src/locale/fr-ch.js @@ -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', diff --git a/src/locale/fr.js b/src/locale/fr.js index eae2dfbed..3ff1c4b5a 100644 --- a/src/locale/fr.js +++ b/src/locale/fr.js @@ -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', diff --git a/src/locale/fy.js b/src/locale/fy.js index 1bd6564bf..b84dbbe7d 100644 --- a/src/locale/fy.js +++ b/src/locale/fy.js @@ -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', diff --git a/src/locale/gl.js b/src/locale/gl.js index d0288cb1d..bdccae922 100644 --- a/src/locale/gl.js +++ b/src/locale/gl.js @@ -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', diff --git a/src/locale/hr.js b/src/locale/hr.js index b5426f1f7..7c41712ca 100644 --- a/src/locale/hr.js +++ b/src/locale/hr.js @@ -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', diff --git a/src/locale/lb.js b/src/locale/lb.js index fcb5c1f8b..55676e799 100644 --- a/src/locale/lb.js +++ b/src/locale/lb.js @@ -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]', diff --git a/src/locale/lo.js b/src/locale/lo.js index aed4f46c4..34d745214 100644 --- a/src/locale/lo.js +++ b/src/locale/lo.js @@ -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', diff --git a/src/locale/lt.js b/src/locale/lt.js index 81e7e81f1..b2900db24 100644 --- a/src/locale/lt.js +++ b/src/locale/lt.js @@ -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', diff --git a/src/locale/lv.js b/src/locale/lv.js index 53aec40de..1ff0817bd 100644 --- a/src/locale/lv.js +++ b/src/locale/lv.js @@ -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', diff --git a/src/locale/me.js b/src/locale/me.js index dd6bf3100..41e595992 100644 --- a/src/locale/me.js +++ b/src/locale/me.js @@ -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', diff --git a/src/locale/nb.js b/src/locale/nb.js index 60b2f4d63..6b06c7245 100644 --- a/src/locale/nb.js +++ b/src/locale/nb.js @@ -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', diff --git a/src/locale/ne.js b/src/locale/ne.js index 07132bd5c..76dd1a232 100644 --- a/src/locale/ne.js +++ b/src/locale/ne.js @@ -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 बजे', diff --git a/src/locale/nl.js b/src/locale/nl.js index 299968944..1c6be4daf 100644 --- a/src/locale/nl.js +++ b/src/locale/nl.js @@ -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', diff --git a/src/locale/pt-br.js b/src/locale/pt-br.js index 56e4d53ee..50748fb0e 100644 --- a/src/locale/pt-br.js +++ b/src/locale/pt-br.js @@ -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', diff --git a/src/locale/pt.js b/src/locale/pt.js index 0a38d468b..db3ba6488 100644 --- a/src/locale/pt.js +++ b/src/locale/pt.js @@ -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', diff --git a/src/locale/si.js b/src/locale/si.js index c2d8a88fa..10c728faa 100644 --- a/src/locale/si.js +++ b/src/locale/si.js @@ -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', diff --git a/src/locale/sl.js b/src/locale/sl.js index 951e3e6d8..36b0e2ebb 100644 --- a/src/locale/sl.js +++ b/src/locale/sl.js @@ -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', diff --git a/src/locale/sq.js b/src/locale/sq.js index d8a9c0234..c5aeac3e1 100644 --- a/src/locale/sq.js +++ b/src/locale/sq.js @@ -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'; diff --git a/src/locale/sr-cyrl.js b/src/locale/sr-cyrl.js index 92bad84d2..af2a84d20 100644 --- a/src/locale/sr-cyrl.js +++ b/src/locale/sr-cyrl.js @@ -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', diff --git a/src/locale/sr.js b/src/locale/sr.js index f338c7623..46fc74966 100644 --- a/src/locale/sr.js +++ b/src/locale/sr.js @@ -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', diff --git a/src/locale/sw.js b/src/locale/sw.js index 0b7ae9212..06850d6f7 100644 --- a/src/locale/sw.js +++ b/src/locale/sw.js @@ -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', diff --git a/src/locale/th.js b/src/locale/th.js index 9437da807..107e0a94b 100644 --- a/src/locale/th.js +++ b/src/locale/th.js @@ -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 วินาที', diff --git a/src/locale/vi.js b/src/locale/vi.js index 116aca48e..34cc18d1e 100644 --- a/src/locale/vi.js +++ b/src/locale/vi.js @@ -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); diff --git a/src/test/helpers/common-locale.js b/src/test/helpers/common-locale.js index 5114fb72a..d641e0438 100644 --- a/src/test/helpers/common-locale.js +++ b/src/test/helpers/common-locale.js @@ -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'); } }); }