如何将 UTC + 偏移日期转换为本地?

How to convert UTC + Offset Date to Local?

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

我已经将该 UTC DateTime 字符串转换为 Javascript 中的 ISO 字符串,然后将该值传递给 moment 并对其调用 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,我认为它需要一个矩值。

如果 2016-07-28 16:00:00.000 是 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);

(但没有时刻自定义格式更困难)