【问题标题】:Unix Time Stamp and JavaScript Time; too big!Unix 时间戳和 JavaScript 时间;太大!
【发布时间】:2009-04-17 18:53:59
【问题描述】:

我正在为 jQuery 使用 flot 图形库,它对任何时间序列都使用 javascript 时间(提醒一下,这是自 1970 年 1 月以来的毫秒数。Unix 时间是 )。

我当前的代码如下所示:

foreach($decoded['results'] as $currentResult) {
         if($currentResult['from_user'] == $user) {
             $strippedTexts = $currentResult['created_at'];
             $dates []= strtotime($strippedTexts);
         }
    }

这给了我一组 Unix 时间戳。我想在循环中为 JavaScript 准备数据,但是当我尝试时

$dates []= 1000*strtotime($strippedTexts);

数字太大,它会吐出“[-2147483648]”。我是否需要将允许在数组中保存的变量的“类型”更改为 bignum 之类的?

谢谢!

【问题讨论】:

  • 以下评论的重复,因此您会收到响应通知:您如何将变量获取到 javascript? Javascript 无法读取 PHP 变量,因此您必须以某种方式传递它。它不应该关心它是一个字符串还是一个数字。如果你能展示你是如何实际使用 $dates 数组的,我可以看看。
  • (不在我的工作计算机上)但我打印的数组大致如下: ,但实际上使用 flot 库函数调用脚本标记中的变量。完整的程序在:phpfreaks.com/forums/index.php/topic,248668.0.html 谢谢!

标签: php javascript time bignum


【解决方案1】:

试试这个:

$dates []= 1000.0*strtotime($strippedTexts);

这会将它变成浮点数,在 php 中可以存储比 int 更大的数字。

【讨论】:

  • 那么数组的每个元素是否都有自己的变量类型?
  • PHP 的类型很松散。我认为您可以在数组中混合任何类型。
  • 我终于回到了我的测试机;这仍然会导致大量负数的出现,然后数组停止。恶心,呕吐!
  • @Alex,我认为你需要尝试一下 Chad 的想法。并更改接受的答案。
【解决方案2】:

如果您有可用的BCMath Arbitrary Precision functions,您可以尝试使用它们:

$dates[] = bcmul("1000", strtotime($strippedTexts));

或者只是,你知道,在末尾附加三个零。

$dates[] = strtotime($strippedTexts).'000';

在这两种情况下,您最终都会将值存储为字符串,但这对您的使用无关紧要。

【讨论】:

  • 我试过了:$strippedTexts = $currentResult['created_at']; $bigstring = strtotime($strippedTexts).'000'; $dates []= settype($bigstring, "float");它产生一个全是“1”的数组。不幸的是,我使用的 javascript 库需要将结果作为数字,而不是字符串。还有其他想法吗?
  • 如何将变量传给 javascript? Javascript 无法读取 PHP 变量,因此您必须以某种方式传递它。它不应该关心它是一个字符串还是一个数字。如果你能展示你是如何实际使用 $dates 数组的,我可以看看。
【解决方案3】:

不需要解决方案,因为没有问题:让 JavaScript 做乘法。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2021-02-12
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2013-03-11
    相关资源
    最近更新 更多