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)?
答案 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