在javascript中解析ISO 8601基本日期时间格式

时间:2017-05-10 16:37:57

标签: javascript iso8601 gnome-shell-extensions

我有一个日期,从JSON返回,格式如下:

YYYYMMDDThhmmssZ

我想在Javascript中解析它。我找到了一些资源,将这种格式编目为ISO-8601 基本格式,这与扩展格式略有不同,如下所示:

YYYY-MM-DDThh:mm:ssZ

我找到了一些如何解析扩展格式的资源,但到目前为止我还没有找到任何解析基本格式的资源。这些功能是否存在于Javascript的Date模块中,或者我必须使用其他模块(例如Moment)?我问,因为这对我来说不是一个选项,因为我正在开发的应用程序是一个gnome-shell扩展,我不想有任何额外的依赖。

1 个答案:

答案 0 :(得分:1)

更新

如果您不能使用moment.js并且您可以依赖于所描述的输入格式,那么请考虑使用以下内容自行解析:



function parseDate(input) {
  return new Date(Date.UTC(
    parseInt(input.slice(0, 4), 10),
    parseInt(input.slice(4, 6), 10) - 1,
    parseInt(input.slice(6, 8), 10),
    parseInt(input.slice(9, 11), 10),
    parseInt(input.slice(11, 13), 10),
    parseInt(input.slice(13,15), 10)
  ));
}

console.log(parseDate('20130208T080910Z'));




切出复合材料零件相当简单。唯一的怪癖是1月是第0个月(因此是- 1)并且Date构造函数假定您的参数是本地时间,因此我们遵循Date文档中给出的建议:< / p>

  

注意:如果将Date作为具有多个参数的构造函数调用,则指定的参数表示本地时间。如果需要UTC,请使用new Date( Date.UTC(...) )使用相同的参数。

我省略了格式检查,但是如果你需要它,你可以定义一个正则表达式来检查你的输入(我推荐一些不比/^[0-9]{8}T[0-9]{6}Z$/更复杂的东西,然后让{{1做它的事情。)

旧答案,已更新以明确指定格式字符串

如果您可以使用moment.js,它已经支持解析此格式:

&#13;
&#13;
Date.UTC(...)
&#13;
console.log(moment('20130208T080910Z', 'YYYYMMDDTHHmmssZ'));
&#13;
&#13;
&#13;