如何全局配置Moment以始终将日期格式设置为“ DD MM”

时间:2018-08-21 13:59:14

标签: javascript localization momentjs

我有一个文本输入字段,我想尝试假设用户输入的日期。我只是将文本传递给力矩对象,然后检查是否有效。

moment(textInput).isValid()

当用户输入07 09时,默认情况下会假设其为month day,而09 July则默认为moment

有没有一种方法可以配置此时刻以始终假定日期输入为07 September

编辑:

尝试过

dd mm

const dateObj = moment("07 09", moment.defaultFormat).toDate() console.log("dateObj", dateObj) // Sat Sep 01 2007 00:00:00 GMT+0100 (British Summer Time) 非常擅长检测您输入的日期,是否是moment07 Sept等。我仍然希望它接受任何格式,只是希望它不假定美国格式的日期,并始终将第一个数字检测为日期,将第二个数字检测为月份。

3 个答案:

答案 0 :(得分:2)

无法全局配置矩以使moment(String)解析不是ISO 8601或RFC 2822的输入。(如果需要,您可以在GitHub上的源代码中查看configFromString方法页)。 Doc指出:

  

从字符串创建时刻时,我们首先检查字符串是否与已知的ISO 8601格式匹配,然后检查字符串是否与RFC 2822 Date time格式匹配,然后放回{{1 }}(如果找不到已知格式)。

     

要获得一致的结果以解析ISO 8601字符串以外的任何内容,应使用String + Format

因此,如果必须解析自定义格式,则必须使用moment(String, String)moment(String, String[])

  

如果您不知道输入字符串的确切格式,但是知道它可能是多种格式之一,则可以使用一系列格式。

     

这与String + Format相同,只是它将尝试将输入匹配为多种格式。

请注意:

  

从版本 2.3.0 开始,Moment使用一些简单的试探法来确定要使用的格式。顺序:

     
      
  • 首选格式会导致valid个日期超过无效日期。
  •   
  • 首选格式多于少的字符串,而格式多于少的字符串,即,更严格的解析。
  •   
  • 在数组中优先使用格式晚于格式。
  •   

在您的情况下,您可以使用moment(String, String[])以格式数组传递new Date(string)"DD MM",以便瞬间解析"DD MMM""07 09"。这是一个实时示例:

"07 Sept"
const input = ["07 09", "07 Sept"];
const formats = ["DD MM", "DD MMM"];
input.forEach((value) => {
  let m = moment(value, formats)
  console.log("date", m.toDate());
  console.log("ISO string", m.format());
});

答案 1 :(得分:1)

您可以使用yrefmoment.defaultFormat

请参阅文档format section

答案 2 :(得分:0)

我认为这可以解决问题:

moment().format("DD MM");