<p id="app"></p>
const app = document.getElementById("app");

const isValidDateString = (str, format) => {
  const formatString = dateFns.format(
    dateFns.parse(str, format),
    format
  )
  return formatString === str;
}

app.innerHTML = `
<ul>
<li>2022-13-01: moment=${moment('2022-13-01','YYYY-MM-DD',true).isValid()} / date-fns=${dateFns.isValid(new Date('2022-13-01'))} / isValidDateString=${isValidDateString('2022-13-01', 'YYYY-MM-DD')}</li>
<li>2022-01-32: moment=${moment('2022-01-32','YYYY-MM-DD',true).isValid()} / date-fns=${dateFns.isValid(new Date('2022-01-32'))} / isValidDateString=${isValidDateString('2022-01-32', 'YYYY-MM-DD')}</li>
<li>2022-02-29: moment=${moment('2022-02-29','YYYY-MM-DD',true).isValid()} / date-fns=${dateFns.isValid(new Date('2022-02-29'))} / isValidDateString=${isValidDateString('2022-02-29', 'YYYY-MM-DD')}</li>
<li>2022-04-31: moment=${moment('2022-04-31','YYYY-MM-DD',true).isValid()} / date-fns=${dateFns.isValid(new Date('2022-04-31'))} / isValidDateString=${isValidDateString('2022-04-31', 'YYYY-MM-DD')}</li>
</ul>
`;

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.28.5/date_fns.min.js
  2. https://cdn.jsdelivr.net/momentjs/2.10.6/moment-with-locales.min.js