我正在使用一个需要moment.js的jquery插件,因为我对它很陌生让我感到困惑。
根据我在网上找到的moment.js / doc和其他一些帖子,我理解以下内容:
Moment的解析器非常宽容,这可能导致不受欢迎 行为。从版本2.3.0开始,您可以为最后一个指定布尔值 使Moment使用严格解析的参数。严格的解析需要 格式和输入完全匹配。
moment('It is 2012-05-25', 'YYYY-MM-DD').isValid(); // true
moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid(); // false
moment('2012-05-25', 'YYYY-MM-DD', true).isValid(); // true
我们也可以同时使用语言和严格:
moment('2012-10-14', 'YYYY-MM-DD', 'fr', true);
当我尝试使用法语区域设置时,时刻('2012-10-14','YYYY-MM-DD','fr-ca',true)没有返回true。 (BTW,'fr-ca'是加拿大法语区域,如果你想知道的话。)
var date = '1 févr. 2017'; // it means 1 Feb. 2017
var format ='D MMM YYYY';
var locale = 'fr-ca';
moment.locale(locale);
// Problem starts here:
moment(date, format, locale).isValid(); // return true as expected.
moment(date, format, locale, true).isValid(); // return false, not expected.
我能想到的可能是“févr”。不是“MMM”的格式。如果没有,它会是什么?
以下是来自moment-locale.js源代码的法语短格式月份名称列表。
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'
以下是我试过的完整版本,请帮我确定我做错了什么。
提前致谢。
答案 0 :(得分:0)
使用默认的灵活解析时,忽略缩写中的句点(.
),但在严格模式下,字符串必须与格式完全匹配,并且它不会因为这个时期。
有两种选择:
您可以从输入字符串中删除句点。
var date = '1 févr 2017';
var format ='D MMM YYYY';
或者,您可以更改格式以允许句点:
var date = '1 févr. 2017';
var format ='D MMM. YYYY';