转换日期格式YYYY-MM-DDThh:mm

时间:2018-04-12 09:29:34

标签: javascript date

我申请了一个API,这种格式不接受:

Thu Apr 12 2018 00:00:00 GMT+0800 (CST)

  

“start_time”:[“日期格式错误。请使用此类型格式:YYYY-MM-DDThh:mm [:ss [.uuuuuu]] [+ HH:MM | -HH:MM | Z]。”< / p>

我的部分要求:

我的部分请求数据:

Content-Disposition: form-data; name="start_time"

Thu Apr 12 2018 00:00:00 GMT+0800 (CST)
------WebKitFormBoundaryPtZBgjhBEahHBOLY
Content-Disposition: form-data; name="end_time"

Thu May 31 2018 00:00:00 GMT+0800 (CST)

我有两个问题:

  1. Thu Apr 12 2018 00:00:00 GMT+0800 (CST)是否为日期格式之一?然后有多少种日期格式?

  2. 如何将示例日期转换为此格式YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]

1 个答案:

答案 0 :(得分:0)

你没有说你是怎么得到这个字符串的。如果您有Date对象,则可以使用toISOString生成所需格式的时间戳。回答你的问题:

  

2018年4月12日星期四00:00 00:00 GMT + 0800(CST)是日期格式之一吗?

没有。 ECMAScript Date对象仅需要解析语言规范ECMA-262中提到的ISO 8601子集。对任何其他格式的支持取决于实现。

通常,您不应该依赖内置的解析器。编写自己的解析器要好得多,或者如果需要支持多种格式,请使用库。有很多好的选择,但最重要的是你必须知道时间戳格式,以确保正确解析它,无论你是使用库还是编写自己的解析器。

  

然后有多少种类型的日期格式?

Date对象没有任何格式,它只是一个表示UTC时刻的时间值加上一些相当简单的方法。 toString的格式取决于实现,但是toISOString符合ISO 8601.但要使用它需要Date对象,因此您必须将字符串解析为Date才能使用它。 / p>

  

如何将示例日期转换为此格式YYYY-MM-DDThh:mm [:ss [.uuuuuu]] [+ HH:MM | -HH:MM | Z]?

您可以将其解析为Date(使用您自己的解析器或库),然后使用 toISOString (或等效的库),或者只重新格式化字符串,例如

var s = 'Thu Apr 12 2018 00:00:00 GMT+0800 (CST)';

function toISOString(s) {
  var months = {jan:'01',feb:'02',mar:'03',apr:'04',may:'05',jun:'06',
                jul:'07',aug:'08',sep:'09',oct:'10',nov:'11',dec:'12'};
  var b = s.split(' ');

  return b[3] + '-' +
         months[b[1].toLowerCase()] + '-' +
         ('0' + b[2]).slice(-2) + 'T' +
         b[4] + b[5].substr(3);
}

console.log(toISOString(s));