LocalTime到服务器时区转换

时间:2017-01-21 00:59:09

标签: javascript momentjs datetimepicker

我不知道我的服务器在哪个时区,我最近了解了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"
        }
    });

我该怎么做?

2 个答案:

答案 0 :(得分:1)

Example with local time and UTC

有两种解决方案:

您知道服务器的时区是什么

如果你知道服务器的时区(服务器时间和通用时间之间的“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());