我想在
中获取时间字符串使用JavaScript在chrome中格式化“%Y%间 - %的dT%H:%M:%S%Z”
。但是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
答案 0 :(得分:1)
那么有没有很好的方法来实现我的日期格式?
如果您希望本地时间的ISO-8601版本具有偏移量,您所能做的就是使用{UTC} getDay
,getMonth
等非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)
请注意......
localDate = localDate.toISOString().replace('Z',(offsetUTC<30?'+':'-')+
('0'+Math.floor(Math.abs(offsetUTC)/60)+':').slice(-3)+
('0'+((~~Math.abs(offsetUTC)%60)<30?0:30)).slice(-2));
)不得用减号表示。Z
和数字偏移均为valid ISO 8601 date times。format()
或Datejs getUTCOffset()
等库方法。