PHP时间计算产生不可靠的结果

时间:2013-03-07 01:45:09

标签: php time

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

我会用PHP diff()类中的DateTime替换该时间戳计算。如你所知,计算结果不会每年两次给出正确的结果:当夏令时导致一小时的加或减时。

除此之外,您遇到的问题很可能与您的$data['today'][$city]['max']['imported']不正确的值或由于服务器之间的时区差异以及imported时间戳的任何位置造成的时间戳差异来自。

答案 1 :(得分:1)

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

解决问题的一种方法是在使用if语句

之前检查$data['today'][$city]['max']['imported']的值 这样的事情会有所帮助,检查你的字符串中是否有10个字符:

if (strlen($data['today'][$city]['max']['imported'] == 10) { 
//your code here
}