我试图弄清楚是否可以知道moment
对象是否与day
和month
一起创建。
示例
const date1 = moment("2018-08");
const date2 = moment("2018-08-01");
/* Determine if date1 was set with a day or not */
答案 0 :(得分:1)
您可以像这样检查输入日期的格式。
const date1 = moment("2018-08");
const date2 = moment("2018-08-01");
date1._f // "YYYY-MM"
date2._f // "YYYY-MM-DD"
if ( date1._f == "YYYY-MM") { ... }
答案 1 :(得分:1)
您可以使用creationData()
获取用于创建时刻对象的格式:
创建片刻对象后,可以使用
creationData()
方法访问所有输入:moment("2013-01-02", "YYYY-MM-DD", true).creationData() === { input: "2013-01-02", format: "YYYY-MM-DD", locale: Locale obj, isUTC: false, strict: true }
在您的情况下,您可以使用类似
的内容if( date1.creationData().format.includes('DD') )
请注意,date1.creationData().format
可以是undefined
。
在这里,我编写了一个函数,该函数使用creationData()
,parsingFlags()
和invalidAt()
来考虑更多边缘情况(无效时刻,从JS日期或unix时间戳创建的时刻对象):
function isDaySet(m){
if( moment.isMoment(m) ){
if( !m.isValid() ){
return m.invalidAt() > 2;
}
let creationData = m.creationData();
if( creationData.format && creationData.format.includes('DD') ){
return true;
}
let parsingFlags = m.parsingFlags();
if( !parsingFlags.iso &&
typeof creationData.input === 'string' ){
let mFormatted = m.format('YYYY-MM-D');
return creationData.input.includes(mFormatted);
}
}
return false;
}
let arr = [
moment("2018-08"),
moment("2018-08-01"),
moment("2018-08-1"),
moment("2018-08-01 11"),
moment("01 02 2018", "DD MM YYYY"),
moment(1515424366),
moment("2018-08-01 27:77"),
moment("2018-Marbruary-01", 'YYYY-MMMM-DD'),
moment('Marbruary', 'MMMM')
];
arr.forEach((m) => {
console.log(isDaySet(m));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>