我试图弄清楚是否有可能同时使用momentday创建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>

10-06 04:42