如何将UTC + Offset Date转换为Local?

时间:2016-07-30 17:31:53

标签: javascript date momentjs timezone-offset

我在UTC中的SQLServer数据库中存储了一个值2016-07-28 16:00:00.000

enter image description here

我已将该UTC DateTime字符串转换为Javascript中的ISO字符串,然后将该值传递给片刻并在其上调用toDate()

但是值输出仍然是UTC,包括偏移量。

所以我逐步完成了两个作业的结果,并在每个阶段找到了以下值:

第一项任务:( UTC值4:15 pm表格DB转换为ISOString)

var isoDate = new Date('7/28/2016 4:15:00 PM').toISOString(); 

output value: "2016-07-28T15:15:00.000Z"

第二项任务:(输出为UTC加偏移,而不是预期的17:15本地)

var localOutageStart = moment.utc(isoDate).toDate();

output value:  Thu Jul 28 2016 16:15:00 GMT+0100 (GMT Daylight Time)

相反,我想通过使用偏移量在本地输出值,因此它会在本地输出该值:

desired output value:  28 07 2016 17:15:00

如何输出本地时刻而不是UTC加偏移? 我将结果传递给Bootstrap datetime picker,我觉得这需要一会儿值。

1 个答案:

答案 0 :(得分:2)

如果2016-07-28 16:00:00.000是UTC格式,那么您需要将其视为UTC。作为ISO8601,它应该是2016-07-28T16:00:00.000Z。你可以像这样得到这个:

var i = "2016-07-28 16:00:00.000";
var s = moment.utc(i).toISOString();

或者没有片刻,就像这样:

var i = "2016-07-28 16:00:00.000";
var s = new Date(i + " UTC").toISOString();  // yes, a non-standard hack, but works.

这会创建字符串:"2016-07-28T16:00:00.000Z"

然后当你想在客户端使用它时:

var i = "2016-07-28T16:00:00.000Z";
var m = moment(i);  // here's a moment object you can use with your picker
var d = m.toDate(); // or, if you want a Date object

// or, if you want to custom format a string
var s = m.format("DD MM YYYY HH:mm:ss");

或者如果您想单独使用Date对象执行此操作:

var i = "2016-07-28T16:00:00.000Z";
var d = new Date(i);

(但是没有时刻自定义格式就更难了)