Date.getTimezoneOffset返回一个非整数值。

6

我代码中的以下一行:

var timezoneoffset = new Date().getTimezoneOffset();

返回值为-120.14933013916015。

我本以为返回值应该是120,而且通常情况下返回值总是一个整数。

有人能解释一下吗?现在看来好像需要对结果进行四舍五入操作。


1
这是哪个浏览器? - kol
1
这个问题在所有浏览器上都会出现吗?并且这个问题在任何地方都可以重复吗? - Qantas 94 Heavy
IE10。在我们办公室的另一台机器上也发生了重复的情况。而且,这种情况发生在不同的时区。 - galbarm
你的计算机设置的是哪个时区?以及使用的是哪个版本的Windows系统? - Matt Johnson-Pint
当我将其设置为不同的时区时,它就会发生,因此这不是特定的时区问题。计算机正在运行Win7-64。 - galbarm
1
得到了类似的结果。UA:Mozilla/5.0(Windows NT 6.1; Win64; x64; rv:67.0)Gecko/20100101 Firefox/67.0。得到了时区偏移量为-179.99999999956577而不是-180。 - Olegas
3个回答

1

我已经尝试了所有我能想到的方法,但无法重现您报告的问题。

我能想到的唯一可能是您代码中的其他部分正在修改Date原型。也许您正在使用某个日期/时间库,但没有告诉我们?

请尝试在干净的空控制台中重现此问题。

  • 在URL栏中键入about:blank
  • 按F12打开开发人员工具
  • 转到“控制台”选项卡
  • 在控制台中键入new Date().getTimezoneOffset()

它仍然显示小数吗?

  • 如果是,则IE或Windows存在错误
  • 如果不是,则您其他代码中的某些内容正在修改Date原型。

谢谢您的回答。我已经按照您的指导进行了操作,结果是不行 - 输出是一个整数。我会尝试查找代码中是否有修改日期类型的内容。 - galbarm
你是否在使用任何日期库?比如 Moment.js、date.js、XDate 等等? - Matt Johnson-Pint

0

时区偏移量是UTC和本地时间差的结果,该值表示分钟,如果值为负,则偏移量在UTC之前,在此基础上,这行简单的代码可以将偏移量表示为传统的小时表示。

var offset = (new Date().getTimezoneOffset()/-60);

-1
var timezoneoffset        = new Date().getTimezoneOffset();
var timezoneoffsetinteger = parseInt(timezoneoffset);

变量time timezoneoffsetinteger将作为整数等于-120。我猜你在GMT+2时区?

如果你想让它对于GMT+是正数,对于GMT-是负数,那么你需要这样做:

var timezoneoffsetconvert = timezoneoffsetinteger * (-2) / 2

这将返回(对于GMT+2(-120))120。

1
谢谢您的回答,但我知道我可以这样做(正如我在问题中所述)。我正在尝试理解为什么我首先得到了错误的结果。 - galbarm
getTimezoneOffset(); 获取当前时区,然后计算出到达UTC所需的步骤,例如对于GMT+2,需要减去2小时(120分钟)。 - GeorgeTaylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接