如何将 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);
(但没有时刻自定义格式更困难)
我在 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);
(但没有时刻自定义格式更困难)