日期比较错了

时间:2011-12-29 16:14:44

标签: php datetime

$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,

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

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

4 个答案:

答案 0 :(得分:1)

它有很多问题,但这是最明显的事情:

  • $arr正在被,\r\n展开,这意味着逗号将不再出现在任何结果数组元素中,因为分隔符将被丢弃(除非数据比您最初发布的数据多)
  • 您实际上并未在第一个$key循环中使用foreach,因此您可能只是省略它。
  • $arrr在第一个循环中不断被覆盖,这意味着它只包含循环完成时来自$arr的最后一个元素的逗号分隔数据。由于之前的explode()调用删除了您的尾随逗号,因此此时可能只是一个数组。
  • 您在第二个循环条件中使用count()函数。计数不会改变,所以你应该把它放在循环本身之前或第一部分中,如下所示:

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

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

答案 1 :(得分:0)

首先删除逗号,然后删除 strtotime


$visDate = strtotime(trim($visArr[1], ","));


答案 2 :(得分:0)

首先,你必须这样做:

$today = time();

获取自Epoch以来的当前时间。

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

if($visDate < $today)

此条件始终返回true ,因为$today变量包含当前时间,而访问者日志文件包含历史访问者记录,显然小于当前时间戳。

如果您只是希望您的最终数组仅向显示过去24小时的访问者,那么您的意图应该是:

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

84600一天中没有秒。

答案 3 :(得分:0)

...嗯

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

你让PHP生成一个时间戳,将其格式化为字符串,然后将其解析回时间戳...为什么不简单地

$today = time();