getTimezoneOffset结果不一致

时间:2015-06-11 09:47:27

标签: javascript datetime

documentation似乎建议getTimezoneOffset()始终返回当前语言环境的偏移量,无论日期对象如何。但是我得到的结果不一致,我无法理解。

new Date().getTimezoneOffset()                             // -120
new Date("2015-03-10T15:48:05+01:00").getTimezoneOffset()  // -60
new Date("2015-03-10T15:48:05-04:00").getTimezoneOffset()  // -60

另外,是否有更好的方法可以将时区从日期时间字符串中删除(也许使用moment.js)?

2 个答案:

答案 0 :(得分:4)

getTimezoneOffset使用执行该计算机的计算机的时区设置,返回所调用的Date对象所代表的特定时刻的偏移量。代码。

由于许多时区会更改daylight saving time的偏移量,因此不同日期和时间的值不同是完全正常的。当您在new Date()上调用它时,您将获得当前偏移量。

getTimezoneOffset返回的值以UTC的 west 分钟为单位,与[+/-]HH:mm格式返回的更常见的偏移量相比, east 的UTC。因此,您提供的时区在UTC + 1和UTC + 2之间交替显示。我的猜测是,计算机提供的输出是在使用中欧时间的区域之一 - 尽管它可能是其他几个区域之一。

此外,当您将偏移量作为ISO8601格式化字符串的一部分传入时,确实会考虑该偏移量 - 但仅在解析期间。应用偏移量,Date对象在内部保留UTC时间戳。然后它会忘记你提供的偏移量。在输出时,一些函数将明确使用UTC,但大多数函数将在发出结果之前转换为本地时区。

您还询问了如何使用moment.js获取日期时间字符串的偏移量。是的,这很简单:

// Create a moment object.
// Use the parseZone function to retain the zone provided.
var m = moment.parseZone('2015-03-10T15:48:05-04:00');

// get the offset in minutes EAST of UTC (opposite of getTimezoneOffset)
var offset = m.utcOffset(); // -240

// alternatively, get it as a string in [+/-]HH:mm format
var offsetString = m.format("Z");  // "-04:00"

答案 1 :(得分:1)

这是因为Daylight Savings Time。对于您的时区,6月11日是UTC + 2,3月10日是UTC + 1:

 function showCoords(event) {
        var x = event.clientX;
        var y = event.clientY;
    //    var coor = "X coords: " + x + ", Y coords: " + y;
    //    document.getElementById("demo").innerHTML = coor;
        var ele = document.getElementById("tt");
        var width = ele.offsetWidth;
        var height = ele.offsetHeight;
        var half=(width/2);
       if(x>half)
        {
            alert('right click');

        }
        else
       {
           alert('left click');

        }


    }

对我来说,因为我在东部时区,会发生以下情况:

// when in DST (since it's June)
new Date("2015-06-11T00:00:00Z").getTimezoneOffset();       // -120
// when not in DST
new Date("2015-03-10T15:48:05+01:00").getTimezoneOffset();  // -60