Is there a way to validate time using Moment JS?

前端 未结 2 1544
囚心锁ツ
囚心锁ツ 2021-02-19 06:24

Is there a way to validate if the String passed as time is valid using Moment JS?

The operations moment(\"2014-12-13 asdasd\",\"YYYY-MM-DD LT\").isValid() o

相关标签:
2条回答
  • 2021-02-19 06:40

    const allPossibleFormats = [
      'D MMMM YYYY',
      'D MMMM YYYY HH:mm',
      'DD-MM-YY',
      'DD-MM-YYYY',
      'DD.MM.YYYY',
      'DD.MM.YYYY HH:mm',
      'DD/MM/YY',
      'DD/MM/YYYY',
      'DD/MM/YYYY HH:mm:ss',
      'HH:mm:ss',
      'M/D/YYYY',
      'D/M/YYYY',
      'MM-DD-YY',
      'MM-DD-YYYY',
      'MM-DD-YYYY HH:mm:ss',
      'MM/DD/YY',
      'MM/DD/YYYY',
      'MM/DD/YYYY HH:mm:ss',
      'MMM D YYYY',
      'MMM D YYYY LT',
      'MMMM Do YYYY',
      'MMMM Do YYYY LT',
      'YYYY-DD-MM HH:mm:ss',
      'YYYY-MM',
      'YYYY-MM-DD',
      'YYYY-MM-DD HH:mm',
      'YYYY-MM-DD HH:mm:ss',
      'YYYY-MM-DD LT',
      'YYYY-MM-DD h:mm:ss A',
      'YYYY-MM-DDTHH:mm:ssZ',
      'ffffd, MMM D YYYY LT',
      'ffffdd D MMMM YYYY HH:mm',
      'ffffdd, MMMM Do YYYY LT'
    ];
    
    moment('Chicago Illinois 46702', allPossibleFormats, true).isValid(); // false
    moment('18/01/1944', allPossibleFormats, true).isValid(); // true
    moment('22-10-2020', allPossibleFormats, true).isValid(); // true
    moment('1944-01-18 12:00:00', allPossibleFormats, true).isValid(); // true
    moment('2001-01-01 00:00:00', allPossibleFormats, true).isValid(); // true
    moment('2001-01', allPossibleFormats, true).isValid(); // true
    <script src="https://momentjs.com/downloads/moment.js"></script>

    0 讨论(0)
  • 2021-02-19 06:43

    As described in the documentation, as of moment 2.3.0, you can pass a third parameter true which turns on "strict parsing" mode.

    moment("2014-12-13 asdasd","YYYY-MM-DD LT", true).isValid()   // false
    
    moment("2014-12-13 12:34 PM","YYYY-MM-DD LT", true).isValid()   // true
    

    The down side is that it must match the locale's format (i.e. the one supplied as the second argument) exactly. Since LT is equivalent to h:mm A in English, it will only accept 12-hour time without seconds. If you pass 24 hour time, or pass seconds, then it will fail.

    moment("2014-12-13 12:34:00 PM","YYYY-MM-DD LT", true).isValid()   // false
    moment("2014-12-13 15:00","YYYY-MM-DD LT", true).isValid()         // false
    

    A better solution might be to pass multiple formats with strict parsing:

    var formats = ["YYYY-MM-DD LT","YYYY-MM-DD h:mm:ss A","YYYY-MM-DD HH:mm:ss","YYYY-MM-DD HH:mm"];
    moment("2014-12-13 12:34 PM", formats, true).isValid()     // true
    moment("2014-12-13 15:00", formats, true).isValid()        // true
    moment("2014-12-13 12:34:00 PM", formats, true).isValid()  // true
    
    0 讨论(0)
提交回复
热议问题