我不知道我的服务器在哪个时区,我最近了解了ISO 8601,并且我从后端获取了这种格式的日期:
2017-01-21T00:32:59Z
问题#1:
当我做的时候
var date = new Date("2017-01-21T00:32:59Z");
console.log(date); //It displays date in local PST format.
Fri Jan 20 2017 16:32:59 GMT-0800 (PST) //Not what I'm expecting
我想在与服务器相同的时区显示它。
问题2:
我正在使用dateTimePicker来选择时间。(安排报告)。
如何选择本地时间(新日期())并将其转换为服务器时间? (需要MomentJS帮助)
这是我目前的代码:
$datetimepicker.datetimepicker({
minDate: new Date(), **//I want to convert this date to server date.**
defaultDate: new Date(),
icons: {
time: "fa fa-clock-o",
date: "fa fa-calendar",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down"
}
});
我该怎么做?
答案 0 :(得分:1)
有两种解决方案:
如果你知道服务器的时区(服务器时间和通用时间之间的“delta”),你可以使用MomentJS:
var time = moment('2017-01-21T00:32:59Z').tz('America/Toronto');
在这种情况下,您必须让服务器发送其本地时间(而不是UTC时间)。否则,您将无法猜测服务器的本地时间是什么。
答案 1 :(得分:0)
Javascript日期对象包含UTC时间值,因此默认情况下它们是UTC。主机时区偏移用于计算,但是在与ECMAScript ed 5及更高版本(可能不是所有正在使用的)一致的实现中,字符串' 2017-01-21T00:32:59Z'将被解析为UTC。
new Date('2017-01-21T00:32:59Z')
将创建一个Date对象,其时间值等于' 2017-01-21T00:32:59Z'。时间值实际上是1970-01-01T00:00:00Z之前或之后的毫秒数,这就是Date对象可以被认为是UTC的原因。
当使用Date get * 方法(如 getHours 等)时,主机时区偏移量用于计算" local"值,但Date对象本身仍然是UTC。您可以使用 getUTC * 方法查看等效的UTC值。
当您显示日期时,通常会调用其 toString 方法,这与实现有关。但是,浏览器将输出标准化为" local"时间基于主机系统时区偏移设置。
如果要查看UTC等效项,请使用 toISOString 方法,该方法始终使用+00:00偏移量。还有 toLocaleString ,但它在不同的实现中可能会有很大的不同,至少在Safari中,我的日期和数字格式的系统设置会被忽略。
var d = new Date('2017-01-21T00:32:59Z');
console.log('Default: ' + d.toString());
console.log('ISO 8601: ' + d.toISOString());
console.log('Locale: ' + d.toLocaleString());