【发布时间】:2013-08-21 20:45:43
【问题描述】:
我有一个 XML 文件正在解析,然后使用 PHP 插入到我的数据库中。然而,日期节点采用奇怪的XML 格式,我认为它是毫秒。到目前为止,我尝试转换它没有成功,我希望有人能指出我的错误。
XML
<est__start>1335744000000</est__start>
<est__end>1342742400000</est__end>
在转换之前哪个日期更易读
<est__start> 04-30-2012 </est__start>
<est__end> 07-20-2012 </est__end>
PHP
$start = $data->est__start;
if (empty($start)) {
$start = '';
} else {
$start = intval($start);
$seconds = $start / 1000;
$start = date("d-m-Y", $seconds);
}
$end = $data->est__start;
if (empty($end)) {
$end = '';
} else {
$end = intval($end);
$seconds = $end / 1000;
$end = date("d-m-Y", $end);
}
然而,最终结果总是与此类似
25-01-1970
而且我需要它看起来像转换之前的样子。像这样
04-30-2012
由于当原始日期转换进入 XML 文件时我没有处理它,所以我不确定我哪里出错了。任何帮助表示赞赏。
【问题讨论】:
-
我很快猜
intval挡住了你的路。echo PHP_INT_MAX;了解您使用的系统为您提供了什么。它将秒数限制为 32 位有符号最大值。 -
@hakre 虽然问题与转换 Unix 时间戳有关,但 OP 的问题与他如何编写代码和整数的有限大小有关。这是个好问题。
-
是的,我很快就完成了这个骗局,你需要使用浮点数而不是强制转换。我也把它放在我的答案stackoverflow.com/a/18367563/367456 中,这是在 32 位系统上处理它的标准方法在 PHP 中。对于这些情况,精度应该没问题,否则需要 bcmath 或 gmp。
标签: php xml simplexml integer-overflow