使用JavaScript将带有时区的日期字符串转换为本地时间的日期对象

Mar*_*ina 28 javascript timezone datetime

我的日期字符串的格式如下所示: yyyy-MM-ddTHH:mm:ss-0Z00

例1:2010-03-05T07:03:51-0800

例2:2010-07-01T20:23:00-0700

我需要使用这些日期字符串创建日期对象.new Date()不适用于此字符串.请帮我将这些日期字符串转换为具有本地时区的日期对象.

谢谢!

编辑:我在Pentaho Data Integration 4.3.0中使用它.

小智 21

以我的时区为例(AEST):

function parseDate(str_date) {
  return new Date(Date.parse(str_date));
}


var str_date = "2015-05-01T22:00:00+10:00"; //AEST time
var locale_date = parseDate(str_date);
Run Code Online (Sandbox Code Playgroud)

locale_date:2015年5月1日星期五22:00:00 GMT + 1000(AEST)

var str_date = "2015-05-01T22:00:00+00:00" //UTC time
var locale_date = parseDate(str_date);
Run Code Online (Sandbox Code Playgroud)

locale_date:星期六2015年2月2日08:00:00 GMT + 1000(AEST)

  • 这应该是正确的答案,谢谢您的帮助。 (2认同)
  • 它在 Safari Mac 中不起作用。新日期(Date.parse("2017-12-13GMT+0530")) (2认同)

And*_*w M 18

您可以使用Moment.js等库来执行此操作.

请参阅String + Format解析.

http://momentjs.com/docs/#/parsing/string-format/

以下内容解析您提供的日期,但您可能需要根据需要对其进行修改.

var oldDate = "2010-03-05T07:03:51-0800";

var dateObj = moment(oldDate, "YYY-MM-DDTHH:mm:ssZ").toDate();
Run Code Online (Sandbox Code Playgroud)

或者,请参阅Moment的String解析器,它看起来像您提供的格式,但时间秒和时区之间的空格除外.

http://momentjs.com/docs/#/parsing/string/

替代

第二种方法是使用Date.js,这是另一个似乎正好解析格式的库.http://www.datejs.com

  • 如果问题是"带有时区",那么这不应该是正确的答案.时刻不考虑时区偏移,而是使用系统的时区.为什么你会使用一个库来做一些事情,也可以通过使用本机JS解析日期来完成. (4认同)

Joe*_*son 11

日期字符串:

var strDate = "2010-07-01T20:23:00-0700";

到本机JS Date对象中的本地时间表示:

var ltzDate = (new Date(strDate)).toLocaleString();