javascriptdate-format

Check if a string is a date value


What is an easy way to check if a value is a valid date, any known date format allowed.

For example I have the values 10-11-2009, 10/11/2009, 2009-11-10T07:00:00+0000 which should all be recognized as date values, and the values 200, 10, 350, which should not be recognized as a date value. What is the simplest way to check this, if this is even possible? Because timestamps would also be allowed.


Solution

  • Would Date.parse() suffice?

    See its relative MDN Documentation page.

    Date.parse returns a timestamp if string date is valid. Here are some use cases:

    // /!\ from now (2021) date interpretation changes a lot depending on the browser
    Date.parse('01 Jan 1901 00:00:00 GMT') // -2177452800000
    Date.parse('01/01/2012') // 1325372400000
    Date.parse('153') // NaN (firefox) -57338928561000 (chrome)
    Date.parse('string') // NaN
    Date.parse(1) // NaN (firefox) 978303600000 (chrome)
    Date.parse(1000) // -30610224000000 from 1000 it seems to be treated as year
    Date.parse(1000, 12, 12) // -30610224000000 but days and month are not taken in account like in new Date(year, month,day...)
    Date.parse(new Date(1970, 1, 0)) // 2588400000
    // update with edge cases from comments
    Date.parse('4.3') // NaN (firefox) 986248800000 (chrome)
    Date.parse('2013-02-31') // NaN (firefox) 1362268800000 (chrome)
    Date.parse("My Name 8") // NaN (firefox) 996616800000 (chrome)