不一致的 getTimezoneOffset 结果

mag*_*ged 4 javascript datetime

文件似乎表明使用getTimezoneOffset()总是返回抵消当前的语言环境中,日期对象的irregardless。但是我得到的结果不一致,我无法理解。

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
Run Code Online (Sandbox Code Playgroud)

另外,有没有更好的方法来从日期时间字符串中获取时区(也许使用 moment.js)?

Mat*_*int 5

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

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

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

此外,当您将偏移量作为 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"
Run Code Online (Sandbox Code Playgroud)