Javascript Date(dateString) returns NaN on specific server and browser

前端 未结 4 531
被撕碎了的回忆
被撕碎了的回忆 2021-01-12 04:41

I\'m using the Javascript Date(string) constructor with a date format of \"yyyy-mm-dd\". The constructor works just fine in IE 9 and Firefox unless the app is running on our

相关标签:
4条回答
  • 2021-01-12 05:16

    I suggest attempting a more reliable form of date parsing. The example below uses setFullYear(). Does IE produce a different result with the code below?

    /**Parses string formatted as YYYY-MM-DD to a Date object.
       * If the supplied string does not match the format, an 
       * invalid Date (value NaN) is returned.
       * @param {string} dateStringInRange format YYYY-MM-DD, with year in
       * range of 0000-9999, inclusive.
       * @return {Date} Date object representing the string.
       */
      function parseISO8601(dateStringInRange) {
        var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
            date = new Date(NaN), month,
            parts = isoExp.exec(dateStringInRange);
    
        if(parts) {
          month = +parts[2];
          date.setFullYear(parts[1], month - 1, parts[3]);
          if(month != date.getMonth() + 1) {
            date.setTime(NaN);
          }
        }
        return date;
      }
    

    Source: http://jibbering.com/faq/#parseDate

    0 讨论(0)
  • 2021-01-12 05:20

    It's because of the date format. For some reason, IE and Safari get tripped up with yyyy-mm-dd. Use another date format and you should be all set.

    It's talked about here:
    http://biostall.com/javascript-new-date-returning-nan-in-ie-or-invalid-date-in-safari

    0 讨论(0)
  • 2021-01-12 05:24

    And for those of us who want to know how to replace hyphens (aka dashes) with slashes:

    new Date(dashToSlash(string));
    

    That uses this function:

    function dashToSlash(string){
      var response = string.replace(/-/g,"/");
      //The slash-g bit says: do this more than once
      return response;
    }
    

    In my case it's much easier to convert hyphens to slashes selectively (only where it's needed for the Date() function) than to replace the date format everywhere in my code.

    Note: you really need to define a separate 'response' variable and assign it the value of the replace operation result. If you don't, the string is returned unaltered in Chrome. That's not a huge problem, since Chrome doesn't have a problem with hyphenated date strings to begin with. But still...

    0 讨论(0)
  • 2021-01-12 05:24

    Just use slashes instead of hyphens if you can.


    EDIT: Expanded clarification...

    The ISO 8601 standard format uses the hyphen as a date separator. My answer does not mean you do not need to follow standards. You can use slashes only for the Date constructor if necessary.

    0 讨论(0)
提交回复
热议问题