-2

我有一个脚本,它使用以下逻辑来查看存储的 UNIX 时间戳是否早于 14 小时:

if ($data['today'][$city]['max']['imported'] < (time() - 50400)) { 
    // bad stuff
} else {
    // good stuff
}

在六天左右的时间里,它每 10 分钟运行一次(通过 CRON 作业),它在一天中看似随机的时间出现了四次“坏东西”,没有明显的原因。$data['today'][$city]['max']['imported'] 的值来自一个 XML 文件,该文件在每次脚本运行时转换为数组形式。有 8 个城市,并且这个计算是在一个循环中迭代它们(因此是 $city)。XML 存储在文本文件中。

上次发生这种情况时,我已经实现了 $data['today'][$city]['max']['imported'] 值的保存,它绝对有效(即 10 分钟前)。

有什么明显的我错过了吗?

此外,如果有人知道一种更可靠的方法来检查时间戳是否超过 14 小时,我将不胜感激 - 这必须在 PHP 5.1.something 中工作,因此无法访问 DateTime 类。

4

2 回答 2

1

我会用diff()PHP 的DateTime类替换那个时间戳计算。正如您所拥有的那样,计算不会每年两次给出正确的结果:当夏令时导致一个小时的加法或减法时。

除此之外,您遇到的问题很可能与您$data['today'][$city]['max']['imported']的值不正确,或者由于服务器之间的时区差异以及imported时间戳来自何处而导致的时间戳差异有关。

于 2013-03-07T01:55:55.250 回答
1

您的代码完全没有问题。代码应该可以完美运行,没有问题。我看到的唯一弱点$city是从您的 xml 文件中检索到的值。你说你的xml中只有8个城市,如果有人来自不同的城市,你有默认值吗?

$data['today'][$city]['max']['imported']解决问题的一种方法是在使用 if 语句之前检查您的值

像这样的东西可以帮助,检查你的字符串中是否有 10 个字符:

if (strlen($data['today'][$city]['max']['imported'] == 10) { 
//your code here
}
于 2013-03-07T02:28:55.357 回答