0

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

YYYYMMDDThhmmssZ

我想用Javascript解析它。我发现一些资源将此格式归类为 ISO-8601基本格式,这与扩展格式略有不同,如下所示:

YYYY-MM-DDThh:mm:ssZ

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

4

1 回答 1

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'));

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

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

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

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

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

console.log(moment('20130208T080910Z', 'YYYYMMDDTHHmmssZ'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>

于 2017-05-10T16:47:25.857 回答