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