Date.parse()在Fire Fox和IE中不起作用。它在Chrome中工作正常

时间:2016-08-25 14:08:21

标签: javascript extjs

如何将具有日期时间的字符串转换为日期时间格式。    我的代码是:

      In Chrome its working fine:

      var str = "05-Sep-2013 01:05:15 PM " 
      var res = Date.parse(str) 
      console.log(res) //o/p:1378366515000
      var result = new Date(res)
      console.log(result) //o/p:Thu Sep 05 2013 13:05:15 GMT+0530 (India Standard Time)

     In Firefox and IE:
     console.log(res) //o/p: NaN
     console.log(result) //o/p: Date {Invalid Date}
你能帮我解决一下吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

按照

的建议自行解析字符串

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

  

建议不要使用Date.parse直到ES5,解析   字符串完全取决于实现。还有很多   不同主机解析日期字符串的差异,因此是日期   字符串应该手动解析(如果很多,库可以帮助   要适应不同的格式。)

我给了你一个关于SO的答案的链接,解释了如何做到这一点。

Converting String into date format in JS

此示例甚至可以在非常旧或非常破坏的浏览器上运行。

var lookupMonthName = {
  jan: 0,
  feb: 1,
  mar: 2,
  apr: 3,
  may: 4,
  jun: 5,
  jul: 6,
  aug: 7,
  sep: 8,
  oct: 9,
  nov: 10,
  dec: 11
};

function customParse(dateTimeStr) {
  var dateTime = dateTimeStr.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '').split(' ');
  var date = dateTime[0].split('-');
  date[1] = lookupMonthName[date[1].toLowerCase()].toString();
  date.reverse();
  var time = dateTime[1].split(':');
  if (dateTime[2].toUpperCase() === 'PM') {
    time[0] = (parseInt(time[0], 10) + 12).toString();
  }
  var args = date.concat(time);
  console.log(args);
  return new Date(Date.UTC.apply(null, args));
}

var str = '05-Sep-2013 01:05:15 PM ';
var date = customParse(str);
document.getElementById('out').appendChild(document.createTextNode(date));
console.log(date);
<pre id="out"></pre>

要从Date对象格式化字符串,请参阅SO答案

Where can I find documentation on formatting a date in JavaScript?

您需要付出一点努力,本来可以自己找到这些信息。

答案 1 :(得分:-1)

IE和FF希望&#39; /&#39;而不是&#39; - &#39;在日期

http://plnkr.co/edit/9ZoHwjvgMA2twEoTJTn9?p=preview

var str = "05-Sep-2013 01:05:15 PM ";
console.log( Date.parse( str ) );  // NaN

console.log( Date.parse( str.replace(/-/g, '/') ) ); // 1378404315000

所以解析会得到毫秒,现在你可以把它放在一个日期:

var d = new Date( Date.parse( str.replace(/-/g, '/') ) );
console.log( d ); // 2013-09-05T18:05:15.000Z

就像输入日期一样,但是采用差异格式。