How to create a new Date() in Javascript from a non-standard date format

前端 未结 6 2099
有刺的猬
有刺的猬 2020-12-24 13:47

I have a date in this format: dd.mm.yyyy

When I instantiate a JavaScript date with it, it gives me a NaN

In c# I can specify a date format, to s

6条回答
  •  死守一世寂寞
    2020-12-24 14:17

    You will need to create a function to extract the date parts and use them with the Date constructor.

    Note that this constructor treats months as zero based numbers (0=Jan, 1=Feb, ..., 11=Dec).

    For example:

    function parseDate(input) {
      var parts = input.match(/(\d+)/g);
      // note parts[1]-1
      return new Date(parts[2], parts[1]-1, parts[0]);
    }
    
    parseDate('31.05.2010');
    // Mon May 31 2010 00:00:00
    

    Edit: For handling a variable format you could do something like this:

    function parseDate(input, format) {
      format = format || 'yyyy-mm-dd'; // default format
      var parts = input.match(/(\d+)/g), 
          i = 0, fmt = {};
      // extract date-part indexes from the format
      format.replace(/(yyyy|dd|mm)/g, function(part) { fmt[part] = i++; });
    
      return new Date(parts[fmt['yyyy']], parts[fmt['mm']]-1, parts[fmt['dd']]);
    }
    
    parseDate('05.31.2010', 'mm.dd.yyyy');
    parseDate('31.05.2010', 'dd.mm.yyyy');
    parseDate('2010-05-31');
    

    The above function accepts a format parameter, that should include the yyyy mm and dd placeholders, the separators are not really important, since only digits are captured by the RegExp.

    You might also give a look to DateJS, a small library that makes date parsing painless...

提交回复
热议问题