Javascript getTimezoneOffset结果不一致
似乎建议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
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