我试图弄清楚是否有可能同时使用moment
和day
创建month
对象。
例
const date1 = moment("2018-08");
const date2 = moment("2018-08-01");
/* Determine if date1 was set with a day or not */
最佳答案
您可以使用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>