moment.js-在法语中使用月的缩写形式

moment.js - Use strictness on short form of month in French

本文关键字:缩写 js- 法语 moment      更新时间:2023-09-26

我正在使用一个需要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);

当我尝试使用法语Locale时,moment('2012-10-14','YYYY-MM-DD','fr-ca',true)没有返回true。(顺便说一句,如果你想知道的话,"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源代码中的法语缩写Month名称列表。

monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'

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

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

提前谢谢。

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

有两种选择:

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

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

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