无法处理 js 日期 - Moment

Unable to Handle js date - Moment

moment('Sat Sep 12 2015 15:00:00 GMT+0100 (GMT Daylight Time)').format()
// Error: core-test.js:52920 Uncaught Error: input not handled by moment(…)

我很生气为什么 moment 无法处理这个日期,即使将它剥离我仍然无法解决它。

var date = 'Sat Sep 12 2015 15:00:00 GMT+0100 (GMT Daylight Time)'.split(' GMT')[0];
moment(date).format()
//The same error

您的日期格式应如下所示 this:

var date2 = '2015-09-12T15:00:00+00:00'; // UTC 

您可以提供 moment 用于解析字符串的格式:http://momentjs.com/docs/#/parsing/string-format/

但是您的日期格式无法使用可用的选项,因此您必须删除一些信息。即参考偏移量“GMT”和“GMT 夏令时”的时区名称。由于时区是在“+0100”部分编码的,因此我假设删除这些引用没有问题。

首先创建一个函数来“清理”字符串日期:

function cleanDateString(formattedDate) {
  return formattedDate.replace(/(.*?)(\w{3})(((\+|-)\d{4}).*)/g,"");
}

如果您对您提供的字符串调用该函数 cleanDateString('Sat Sep 12 2015 15:00:00 GMT+0100 (GMT Daylight Time)'),输出将为

"Sat Sep 12 2015 15:00:00 +0100"

现在可以使用正确的格式即时解析这些内容。

如果您查看 http://momentjs.com/docs/#/displaying/format/,那么此字符串所需的格式为

'ddd MMM DD YYYY mm:hh:ss ZZ'

如果你结合上面的两件事,那么你可以得到这样的日期

function parseCustomDate(formattedDate) {
  return moment(cleanDateString(formattedDate),'ddd MMM DD YYYY mm:hh:ss ZZ');
}

这将适用于您给定的字符串

parseCustomDate('Sat Sep 12 2015 15:00:00 GMT+0100 (GMT Daylight Time)')

正则表达式注意事项

如果您想详细了解正则表达式的工作原理,可以查看 link:https://regex101.com/r/tH6hM9/1 中的“说明”和“匹配信息”部分。我用它来调整分组和规则