日期比较错误


wrong in date comparison

$ips = file_get_contents($_SERVER['DOCUMENT_ROOT']."/visitors.txt");
$arr = explode(",",$ips);
$today =  strtotime(date('Y-m-d H:i:s'));
for ($n = 0, $max = count($arr); $n <= $max; $n++) {
 $visArr = explode("#",$arr[$n]);
 $visDate = strtotime($visArr[1]); //$visArr[1] = 2011-12-27 14:10:45
 if($visDate < $today){
    unset ($arr[$n]);   
 }
}
 print_r($arr); //empty array!

数据存储方式

 xxx.xxx.xxx.xxx#2011-12-27 11:56:24,
 xxx.xxx.xxx.xxx#2011-12-28 11:56:24,

当我比较访问者日期时,结果是不正确的,我可以知道它有什么问题吗?

编辑:我修复了我的代码,当比较两个日期时仍然给出一个空数组!!任何建议? ?

它有很多错误,但这里是最明显的:

  • $arr,'r'n爆炸意味着逗号将不再在任何结果数组元素中,因为分隔符被丢弃(除非有更多的数据比你原来发布的)。
  • 你实际上并没有在第一个foreach循环中使用$key,所以你应该省略它。
  • $arrr在第一个循环中不断被覆盖,这意味着当循环完成时,它将只包含$arr的最后一个元素的逗号分隔的数据。因为前面对explode()的调用删除了末尾的逗号,所以此时这可能是一个什么都没有的数组。
  • 在第二个循环条件下使用count()函数。计数不会改变,所以你应该把它放在循环本身之前,或者像这样放在第一部分:

    for ($n = 0, $max = count($arrr); $n <= $max; $n++) {

  • 您在第二个循环中使用<=,因此您正在进行额外的不必要的迭代。包含n个元素的数组的最大索引是n - 1。在这种情况下,您应该使用<,因为$arrr[count($arrr)]没有定义。

先去掉逗号,然后strtotime

<>之前 $visDate = strtotime(trim($visArr[1], ","));

Ummm....

$today =  strtotime(date("Y-m-d H:i:s"));

你让PHP生成一个时间戳,格式化为字符串,然后解析回时间戳…为什么不直接使用

$today = time();

首先按照这里的建议你必须做:

$today = time();

以秒为单位获取当前时间。

由于这个错误的比较,你最终得到一个空数组:

if($visDate < $today)

这个条件将总是返回true,因为$today变量包含当前时间,并且您的访问者日志文件有历史访问者记录,显然小于当前时间戳。

如果你只想让你的最终数组只显示最近24小时的访问者,那么你的条件应该是:

if(($today-$visDate) > 86400)

84600是一天的秒数