moment.js 解析具有严格格式和语言环境的日期

moment.js parse date with strict format and locale

我有一个用例,在该用例中我获取了不同语言环境的日期,并且我正在尝试将它们解析为 RFC2822。

问题是某些语言环境的时刻不能正确解析日期。 例如“24 janv. 2022”不起作用。

日期的语言环境是“fr”-法语,它应该与“ll”格式相匹配。但是我似乎无法正确解析该字符串。

Codepen:https://codesandbox.io/s/sad-swirles-21cf9?file=/src/App.js:53-130(检查控制台)

代码:

const testString = "24 janv. 2022";
const DATE_RFC2822 = "HH:mm MMM DD YYYY";

const parseDate = (date) => {
const locales = [
  "en",
  "de",
  "fr",
  "es",
  "pl",
  "nl",
  "it",
  "ar",
  "cs",
  "sk",
  "sv",
  "zh-cn",
  "tr",
  "el",
  "fi",
  "he",
  "hi",
  "hu",
  "ko",
  "he"
];

for (let i = 0; i < locales.length; i++) {
  let parsedDate = moment(
    date,
    ["D. MMM YYYY", "MMM D, YYYY", "D MMM. YYYY", "D MMMM. YYYY", "ll"],
    locales[i],
    true
  );
  if (parsedDate.isValid()) {
    parsedDate.locale("en");
    return {
      success: true,
      object: parsedDate,
      formatted: parsedDate.format(DATE_RFC2822),
      source: date
    };
  } 
}

return {
  success: false,
  object: "",
  formatted: "",
  source: date
}
};

问题是您没有正确导入本地化,请查看文档中的 Loading locales in NodeJS 部分。

如果您输入:

,则链接代码有效
import moment from "moment/min/moment-with-locales";

而不是

import moment from "moment";