Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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 getTimezoneOffset结果不一致_Javascript_Datetime - Fatal编程技术网

Javascript getTimezoneOffset结果不一致

Javascript getTimezoneOffset结果不一致,javascript,datetime,Javascript,Datetime,似乎建议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").getTimezoneOffs

似乎建议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

另外,是否有更好的方法从日期时间字符串中获取时区(可能是使用矩.js)?

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

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

getTimezoneOffset
返回的值以UTC以西的分钟为单位,而以
[+/-]HH:mm
格式返回的更常见偏移量则以UTC以东的分钟为单位。因此,您给出的时区在UTC+1和UTC+2之间交替。我猜给出这个输出的计算机是在使用中欧时间的区域之一——尽管它可能是其他几个区域之一

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

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

// 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"
这是因为。对于您的时区,6月11日为UTC+2,3月10日为UTC+1:

// 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
对我来说,由于我在东部时区,将发生以下情况:

// when in EST
new Date("2015-03-01T00:00:00Z").getTimezoneOffset();       // 300
// when in EDT
new Date("2015-06-01T00:00:00Z").getTimezoneOffset();       // 240