moment.js - 在法语中使用短月形式的严格性

时间:2015-12-24 21:12:35

标签: javascript jquery momentjs

我正在使用一个需要moment.js的jquery插件,因为我对它很陌生让我感到困惑。

根据我在网上找到的moment.js / doc和其他一些帖子,我理解以下内容:

(来自http://momentjs.com/docs/

  

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.'

以下是我试过的完整版本,请帮我确定我做错了什么。

  

https://jsfiddle.net/egcwzk2u/2/

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用默认的灵活解析时,忽略缩写中的句点(.),但在严格模式下,字符串必须与格式完全匹配,并且它不会因为这个时期。

有两种选择:

  1. 您可以从输入字符串中删除句点。

    var date = '1 févr 2017';
    var format ='D MMM YYYY'; 
    
  2. 或者,您可以更改格式以允许句点:

    var date = '1 févr. 2017';
    var format ='D MMM. YYYY';