检查日期字符串是否为ISO和UTC格式

inf*_*dev 2 javascript validation datetime typescript

我有一个具有这种格式的字符串,2018-02-26T23:10:00.780Z我想检查它是否为ISO8601UTC格式。

let date= '2011-10-05T14:48:00.000Z';
const error;
var dateParsed= Date.parse(date);
if(dateParsed.toISOString()==dateParsed && dateParsed.toUTCString()==dateParsed) {
  return  date;
}
else  {
  throw new BadRequestException('Validation failed');
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是:

  • 我没有抓住错误消息
  • Date.parse()将字符串日期的格式更改1317826080000为无法与ISO或UTC格式进行比较。

我会避免使用诸如moment.js之类的库

mpl*_*jan 6

试试看-您实际上需要创建一个日期对象而不是解析字符串

注意:这将在您发布时测试字符串。

YYYY-MM-DDTHH:MN:SS.MSSZ

它将在有效的ISO8601日期上失败,例如

  • 日期:2018-10-18
  • UTC的合并日期和时间:2018-10-18T08:04:30 + 00:00(00:00不含Z和TZ)
  • 2018-10-18T08:04:30Z
  • 20181018T080430Z
  • 星期:2018-W42
  • 星期几的日期:2018-W42-4
  • 不带日期的日期:-10-18(最后一个ISO8601:2000,RFC 6350 [2]使用)*顺序日期:2018-291

function isIsoDate(str) {
  if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(str)) return false;
  var d = new Date(str); 
  return d.toISOString()===str;
}

console.log(isIsoDate('2011-10-05T14:48:00.000Z'))

console.log(isIsoDate('2018-11-10T11:22:33+00:00'));
Run Code Online (Sandbox Code Playgroud)

  • 如果日期没有首先通过正则表达式的字符串测试,则无需测试日期的有效性 - 至少这是我的想法。它比创建日期对象更快 (3认同)
  • `2018-11-10T11:22:33+00:00` 也将是 ISO8601 和 UTC :D (2认同)