isValid() does not take locale into account
marduone opened this issue · 2 comments
marduone commented
It seems that twix isValid() does not check the validity of the moment objects themselves.
Moment 2.10.6
Twix 0.7.2
Consider the following:
> var moment = require('moment')
undefined
> require('twix')
{ [Function: Twix] _extend: [Function], formatTemplate: [Function] }
> moment.locale('es')
'es'
> var start = moment('15 Aug 2015', 'DD MMM YYYY')
undefined
> start.isValid()
false
> var end = moment('20 Aug 2015', 'DD MMM YYYY')
undefined
> end.isValid()
false
> var range = start.twix(end)
undefined
> range.format()
'Invalid date, Invalid date'
> range.isValid()
true
>
> start
{ [Number: 1421272800000]
_isAMomentObject: true,
_i: '15 Aug 2015',
_f: 'DD MMM YYYY',
_isUTC: false,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: 'Aug',
invalidFormat: false,
userInvalidated: false,
iso: false },
_locale:
{ _months:
[ 'Enero',
'Febrero',
'Marzo',
'Abril',
'Mayo',
'Junio',
'Julio',
'Agosto',
'Septiembre',
'Octubre',
'Noviembre',
'Diciembre' ],
monthsShort: [Function],
_weekdays:
[ 'Domingo',
'Lunes',
'Martes',
'Miércoles',
'Jueves',
'Viernes',
'Sábado' ],
_weekdaysShort: [ 'Dom.', 'Lun.', 'Mar.', 'Mié.', 'Jue.', 'Vie.', 'Sáb.' ],
_weekdaysMin: [ 'Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá' ],
_longDateFormat:
{ LT: 'H:mm',
LTS: 'H:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D [de] MMMM [de] YYYY',
LLL: 'D [de] MMMM [de] YYYY H:mm',
LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm' },
_calendar:
{ sameDay: [Function],
nextDay: [Function],
nextWeek: [Function],
lastDay: [Function],
lastWeek: [Function],
sameElse: 'L' },
_relativeTime:
{ future: 'en %s',
past: 'hace %s',
s: 'unos segundos',
m: 'un minuto',
mm: '%d minutos',
h: 'una hora',
hh: '%d horas',
d: 'un día',
dd: '%d días',
M: 'un mes',
MM: '%d meses',
y: 'un año',
yy: '%d años' },
_ordinalParse: /\d{1,2}º/,
_ordinal: '%dº',
_week: { dow: 1, doy: 4 },
_abbr: 'es',
_ordinalParseLenient: /\d{1,2}º|\d{1,2}/,
_monthsParse:
[ /^Enero|^Ene/i,
/^Febrero|^Feb/i,
/^Marzo|^Mar/i,
/^Abril|^Abr/i,
/^Mayo|^May/i,
/^Junio|^Jun/i,
/^Julio|^Jul/i,
/^Agosto|^Ago/i,
/^Septiembre|^Sep/i,
/^Octubre|^Oct/i,
/^Noviembre|^Nov/i,
/^Diciembre|^Dic/i ],
_longMonthsParse: [],
_shortMonthsParse: [] },
_d: Thu Jan 15 2015 00:00:00 GMT+0200 (EET),
_isValid: false }
>
> range
{ start:
{ [Number: 1421272800000]
_isAMomentObject: true,
_i: '15 Aug 2015',
_f: 'DD MMM YYYY',
_isUTC: false,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: 'Aug',
invalidFormat: false,
userInvalidated: false,
iso: false },
_locale:
{ _months: [Object],
monthsShort: [Function],
_weekdays: [Object],
_weekdaysShort: [Object],
_weekdaysMin: [Object],
_longDateFormat: [Object],
_calendar: [Object],
_relativeTime: [Object],
_ordinalParse: /\d{1,2}º/,
_ordinal: '%dº',
_week: [Object],
_abbr: 'es',
_ordinalParseLenient: /\d{1,2}º|\d{1,2}/,
_monthsParse: [Object],
_longMonthsParse: [],
_shortMonthsParse: [] },
_d: Thu Jan 15 2015 00:00:00 GMT+0200 (EET),
_isValid: false },
end:
{ [Number: 1421704800000]
_isAMomentObject: true,
_i: '20 Aug 2015',
_f: 'DD MMM YYYY',
_isUTC: false,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: 'Aug',
invalidFormat: false,
userInvalidated: false,
iso: false },
_locale:
{ _months: [Object],
monthsShort: [Function],
_weekdays: [Object],
_weekdaysShort: [Object],
_weekdaysMin: [Object],
_longDateFormat: [Object],
_calendar: [Object],
_relativeTime: [Object],
_ordinalParse: /\d{1,2}º/,
_ordinal: '%dº',
_week: [Object],
_abbr: 'es',
_ordinalParseLenient: /\d{1,2}º|\d{1,2}/,
_monthsParse: [Object],
_longMonthsParse: [],
_shortMonthsParse: [] },
_d: Tue Jan 20 2015 00:00:00 GMT+0200 (EET),
_isValid: false },
allDay: false,
_trueStart:
{ [Number: 1421272800000]
_isAMomentObject: true,
_i: '15 Aug 2015',
_f: 'DD MMM YYYY',
_isUTC: false,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: 'Aug',
invalidFormat: false,
userInvalidated: false,
iso: false },
_locale:
{ _months: [Object],
monthsShort: [Function],
_weekdays: [Object],
_weekdaysShort: [Object],
_weekdaysMin: [Object],
_longDateFormat: [Object],
_calendar: [Object],
_relativeTime: [Object],
_ordinalParse: /\d{1,2}º/,
_ordinal: '%dº',
_week: [Object],
_abbr: 'es',
_ordinalParseLenient: /\d{1,2}º|\d{1,2}/,
_monthsParse: [Object],
_longMonthsParse: [],
_shortMonthsParse: [] },
_d: Thu Jan 15 2015 00:00:00 GMT+0200 (EET),
_isValid: false },
_lastMilli:
{ [Number: 1421704800000]
_isAMomentObject: true,
_i: '20 Aug 2015',
_f: 'DD MMM YYYY',
_isUTC: false,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: 'Aug',
invalidFormat: false,
userInvalidated: false,
iso: false },
_locale:
{ _months: [Object],
monthsShort: [Function],
_weekdays: [Object],
_weekdaysShort: [Object],
_weekdaysMin: [Object],
_longDateFormat: [Object],
_calendar: [Object],
_relativeTime: [Object],
_ordinalParse: /\d{1,2}º/,
_ordinal: '%dº',
_week: [Object],
_abbr: 'es',
_ordinalParseLenient: /\d{1,2}º|\d{1,2}/,
_monthsParse: [Object],
_longMonthsParse: [],
_shortMonthsParse: [] },
_d: Tue Jan 20 2015 00:00:00 GMT+0200 (EET),
_isValid: false },
_transferrableEnd:
{ [Number: 1421704800000]
_isAMomentObject: true,
_i: '20 Aug 2015',
_f: 'DD MMM YYYY',
_isUTC: false,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: 'Aug',
invalidFormat: false,
userInvalidated: false,
iso: false },
_locale:
{ _months: [Object],
monthsShort: [Function],
_weekdays: [Object],
_weekdaysShort: [Object],
_weekdaysMin: [Object],
_longDateFormat: [Object],
_calendar: [Object],
_relativeTime: [Object],
_ordinalParse: /\d{1,2}º/,
_ordinal: '%dº',
_week: [Object],
_abbr: 'es',
_ordinalParseLenient: /\d{1,2}º|\d{1,2}/,
_monthsParse: [Object],
_longMonthsParse: [],
_shortMonthsParse: [] },
_d: Tue Jan 20 2015 00:00:00 GMT+0200 (EET),
_isValid: false },
_displayEnd:
{ [Number: 1421704800000]
_isAMomentObject: true,
_i: '20 Aug 2015',
_f: 'DD MMM YYYY',
_isUTC: false,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: 'Aug',
invalidFormat: false,
userInvalidated: false,
iso: false },
_locale:
{ _months: [Object],
monthsShort: [Function],
_weekdays: [Object],
_weekdaysShort: [Object],
_weekdaysMin: [Object],
_longDateFormat: [Object],
_calendar: [Object],
_relativeTime: [Object],
_ordinalParse: /\d{1,2}º/,
_ordinal: '%dº',
_week: [Object],
_abbr: 'es',
_ordinalParseLenient: /\d{1,2}º|\d{1,2}/,
_monthsParse: [Object],
_longMonthsParse: [],
_shortMonthsParse: [] },
_d: Tue Jan 20 2015 00:00:00 GMT+0200 (EET),
_isValid: false } }
icambron commented
Hmm, yeah, I'd accept a PR that checks that the start and end times are valid in isValid()
.
icambron commented
Fixed in the develop branch. Will go into the next release (probably 0.8.1)