【问题标题】:float to unix epoch浮动到 Unix 纪元
【发布时间】:2010-12-23 06:08:34
【问题描述】:

我正在从一个 JSON 数据库中提取数据,该数据库在 unix 纪元中存储时间,但由于某种原因,当我将它们拉出时,这些数字正在浮动。这是我以前从未处理过的事情。所以基本上像1293083730000 这样的数字显示为1.293085408E+12 我需要将数字恢复到纪元时间,以便将其与当前时间进行比较。任何帮助都会很棒。

【问题讨论】:

  • 奇怪。检索数据的代码?
  • 您的时间似乎以毫秒为单位,纪元时间 1293083730 是 Thu Dec 23 00:55:30 2010
  • 你说得对,从纪元开始就是毫秒。

标签: php floating-point unix-timestamp


【解决方案1】:

那是engineering notation,一种写大数的便捷方法。该数字仍然是一个整数。

问题是PHP的内部类型太小,无法将数字表示为小数,见下例:

<?
$i = 1293083730000;
echo "\$i is $i\n\n";
echo sprintf("\$i is %d\n\n", $i);
echo sprintf("\$i is %e\n\n", $i);
?>

这个输出:

$i is 1293083730000

$i is 298573904

$i is 1.293084e+12

您需要 64 位平台或将数字用作字符串或浮点值。有关更多详细信息,请参阅有关整数的 PHP 文档:

http://php.net/manual/en/language.types.integer.php

【讨论】:

  • 好的,如何将工程符号转换为纪元?我不擅长数字。我试过使用floor()round() EDIT 所以我搞砸了?
  • 我不介意将数字作为字符串使用,只是不确定如何从我的数组中获取字符串。我知道我现在听起来很愚蠢。
  • @BrandonRandon,先除以 1000,然后一切正常。
  • 我删除了我的答案:如果您使用 32 位操作系统运行,PHP 与 Java 不同,无法处理 64 位整数。 Steve-o 是正确的 - 只需将您的数字除以 1000,然后您输入 32 位整数范围,您可以将其视为整数(因为 time() 返回的值以秒为单位,而不是毫秒,您可以比较你的新值直接用time())。
  • @BandonRandon 不,你可以直接使用那个数字,并与 PHP time() 函数的返回值进行比较。为什么不是 正确的时间 ?对我来说,这看起来像是一个 unix 时代。
【解决方案2】:

php.ini 配置文件中,有一个值'precision'
它只是定义了一个浮点数将显示多少位。

更多信息在PHP manual

你可以增加精度值再试一次。

【讨论】:

  • 共享主机无法控制 php.ini...嘘
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 2010-10-06
  • 2013-08-04
  • 2018-02-14
  • 2017-12-20
  • 2020-07-21
  • 2012-01-30
  • 2014-09-25
相关资源
最近更新 更多