我有一个文本输入字段,我想尝试假设用户输入的日期。我只是将文本传递给力矩对象,然后检查是否有效。
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)
非常擅长检测您输入的日期,是否是moment
,07 Sept
等。我仍然希望它接受任何格式,只是希望它不假定美国格式的日期,并始终将第一个数字检测为日期,将第二个数字检测为月份。
答案 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)
您可以使用yref
和moment.defaultFormat
请参阅文档format section
答案 2 :(得分:0)
我认为这可以解决问题:
moment().format("DD MM");