无法在Firefox中解析可以在Chrome中解析的日期

问题描述 投票:0回答:1

我有一组日期,如June 2017October 2016等等。

在Firefox中,执行new Date('June 2017')会触发Invalid Date错误。这同样适用于Chrome。

我尝试使用Moment.js但结果是一样的。

我怎样才能让它正常工作?

这是一个快速测试的Pen,和片段一样(检查浏览器控制台):

var date = 'June 2017';
var formatDate = new Date(date);

console.log(formatDate);
javascript cross-browser date-parsing
1个回答
0
投票

浏览器之间确实存在差异。根据MDN

注意:由于浏览器差异和不一致性,强烈建议不要使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。对RFC 2822格式字符串的支持仅限于惯例。对ISO 8601格式的支持不同之处在于仅日期字符串(例如“1970-01-01”)被视为UTC,而不是本地字符串。

如果您的字符串始终采用Month Year格式,您可以考虑按如下方式解析它。

function parseDateString(str) {
  let months = ['January', 'February', 'March',
        'April', 'May', 'June', 'July', 'August',
        'September', 'October', 'November', 'December'];
  let split = str.split(/\s+/);
  return new Date(Date.UTC(parseInt(split[1], 10), months.indexOf(split[0])));
}

function test(str) {
  console.log(`"${str}" is parsed as`, parseDateString(str));
}

test('June 2017');
test('October 2016');
test('March 2018');
© www.soinside.com 2019 - 2024. All rights reserved.