Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何转换UTC+;抵消日期到本地?_Javascript_Date_Momentjs_Timezone Offset - Fatal编程技术网

Javascript 如何转换UTC+;抵消日期到本地?

Javascript 如何转换UTC+;抵消日期到本地?,javascript,date,momentjs,timezone-offset,Javascript,Date,Momentjs,Timezone Offset,我在SQLServer数据库中存储了一个UTC值,即2016-07-28 16:00:00.000: 我已将UTC日期时间字符串转换为Javascript中的ISO字符串,然后将该值传递到一个时刻,并对其调用toDate() 但输出值仍然是UTC,包括偏移量 因此,我仔细查看了两项作业的结果,并在每个阶段找到了以下值: 第一次赋值:(UTC值4:15 pm form DB转换为ISOString) 第二次分配:(输出为UTC加偏移量,而不是预期的17:15本地) 相反,我希望使用偏移量以本地方

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

我已将UTC日期时间字符串转换为Javascript中的ISO字符串,然后将该值传递到一个时刻,并对其调用
toDate()

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

因此,我仔细查看了两项作业的结果,并在每个阶段找到了以下值:

第一次赋值:(UTC值4:15 pm form DB转换为ISOString)

第二次分配:(输出为UTC加偏移量,而不是预期的17:15本地)

相反,我希望使用偏移量以本地方式输出值,因此它将以本地方式输出此值:

desired output value:  28 07 2016 17:15:00
如何代替UTC加偏移量输出本地时刻时间?
我将结果传递给一个我认为需要一个时间值的值。

如果
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);

(但如果没有时间,自定义格式将更加困难)

您的第二个示例已经是本地时间,而不是UTC时间。它还可以帮助您了解您是在搜索结果中查找字符串、日期对象还是时刻对象,以及您使用的区域设置和时区。
16:15
已经是本地时间。UTC时间为
15:15
。为什么要再次求和1小时?而且,第一个示例中的输入也已经在本地时间-所以。。。你到底想完成什么?您只是在矩对象上查找
.local()
?与中一样,
.utc().local().utc().local()
。。。你可以整天都这样做……:)@Oriol 16:15第一个值是从服务器端读取的我的UTC值。所以我预计当地时间17点15分。相反,它似乎将15:15计算为UTC,并添加了不正确的偏移量。@BrianJ-这一部分(16:15为UTC)改变了一切。您的第一个操作将其视为本地时间。+1对于浏览器的关键部分,接收不带时区的字符串,因此被解释为在本地时区。很好,我认为这里混乱的主要原因是@kwah提到传入的服务器日期字符串没有指定时区。我在格式化时刻时注意到一件恼人的事情,它会丢失分钟精度,例如,如果我在调用.format(“MM/DD/YYYY HH:MM”)后读取值为4:10 PM的ISO字符串;力矩的微小值减去3。我确实在这里发布了一个问题,因为以前没有看到过任何类似的问题——格式标记区分大小写。您正在使用月份(
MM
),而您应该使用分钟(
MM
),是的,以前有人问过它。@kwah这完全依赖于浏览器,不可依赖。
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");
var i = "2016-07-28T16:00:00.000Z";
var d = new Date(i);