Javascript不支持64位整数,为什么新的Date()。getTime()返回41位数?

时间:2018-04-12 15:39:19

标签: javascript graphql

let number = new Date().getTime()
// number is 1523546797869
// binary: 10110001010111010011101110011011100101101
// (41 bits)

当我通过GraphQL保存它时,我收到了一个错误信息  由于Javascript语言限制,只能handle 32 bit

  

在字段“invoiceDate”中:预期类型“Int”,找到1523546797869:Int   不能表示非32位有符号整数值:1523546797869

我的问题是,如果Javascript语言限制为32位整数,为什么getTime()返回一个41位的数字?

我也读过this thread。我认为这有点相关,但不能完全理解精确的事情。

1 个答案:

答案 0 :(得分:2)

您已使用您提供的链接回答了自己的问题。

此链接:Does JavaScript support 64-bit integers?。这解释了由于它支持IEEE-754双精度(64位)格式,javascript限制为53位。

此链接:GraphQL BigInt这解释了该包的存在,因为GraphQl仅支持32位整数

  

GraphQL规范将其Int类型限制为32位。也许你之前见过这个错误:

GraphQLError: Argument "num" has invalid value 9007199254740990.
          Expected type "Int", found 9007199254740990.
  

为什么呢? 64位对于JavaScript的53位限制来说太大了。根据Lee Byron的说法,一个52位的整数规范本来就太奇怪了#34;看到这个问题。因此,规范具有32位整数,以确保不能代表64位整数的语言。

这些都与Date.prototype.getTime()返回41位无关。对于具有毫秒的数字时间戳,所有(顺便说一下)都是如此。所以我的困惑是"你对此感到困惑是什么?"