如何在JavaScript中获得带有时间偏移的ISO8601字符串?

时间:2015-07-23 07:47:38

标签: javascript date iso8601

我想在

中获取时间字符串
  

“%Y%间 - %的dT%H:%M:%S%Z”

使用JavaScript在chrome中格式化

。但是chrome只返回'Z'字符,如下所示。

new Date().toISOString()
->"2015-07-23T07:41:36.617Z"

虽然我知道上面的结果是有效的,但我的项目还包括一个c ++应用程序。所以我想统一日期格式,如下所示。

2015-07-23T16:41:36.617+09:00

那么有没有很好的方法来实现我的日期格式?

ES6规范

http://www.ecma-international.org/ecma-262/6.0/#sec-date-time-string-format

2 个答案:

答案 0 :(得分:1)

  

那么有没有很好的方法来实现我的日期格式?

如果您希望本地时间的ISO-8601版本具有偏移量,您所能做的就是使用{UTC} getDaygetMonth等非UTC版本,从{获取时区偏移量{3}},并自己构建字符串。 (或使用像MomentJS这样的库。)规范中没有任何内容可以做到。

答案 1 :(得分:0)

如果有好的方法取决于。事实上,没有内置的方法。但是,您可以使用Date.getTimezoneOffset()并执行一些modulus来自行构建一个。这是一个主角:

cf push csw-events -b https://github.com/cloudfoundry/ruby-buildpack.git

或者稍微冗长一点:

// set up date 2009-02-13T23:31:30.123Z (equivalent to 1234567890123 milliseconds):
var localDate = new Date(1234567890123);
// get local time offset, like -120 minutes for CEST (UTC+02:00):
var offsetUTC = new Date().getTimezoneOffset();
// set date to local time:
localDate.setMinutes(localDate.getMinutes() - offsetUTC);
offsetUTC = {
    // positive sign unless offset is at least -00:30 minutes:
    "s": offsetUTC < 30 ? '+' : '-',
    // local time offset in unsigned hours:
    "h": Math.floor(Math.abs(offsetUTC) / 60),
    // local time offset minutes in unsigned integers:
    "m": ~~Math.abs(offsetUTC) % 60
};
offsetUTC = offsetUTC.s + // explicit offset sign
            // unsigned hours in HH, dividing colon:
            ('0'+Math.abs(offsetUTC.h)+':').slice(-3) +
            // minutes are represented as either 00 or 30:
            ('0'+(offsetUTC.m < 30 ? 0 : 30)).slice(-2);

localDate = localDate.toISOString().replace('Z',offsetUTC);
// === "2009-02-13T23:31:30.123+02:00" (if your timezone is CEST)
     

请注意......