将当前日期与PHP中的d / mm / yyyy格式的日期进行比较

时间:2011-12-05 14:44:25

标签: php string date strtotime

检查给定日期 - 字符串d / mm / yyyy是否过去的最佳方法是什么? 当我使用strtotime()时,由于非美国符号,它不能很好地工作。 当然,我可能会将日期作为字符串处理并比较子字符串,但必须有更好的方法。

if((strtotime('now')-strtotime($date)) > 86400) echo $date;

4 个答案:

答案 0 :(得分:6)

strtotime('now')是对该功能的可怕滥用。您应该只使用time()来获得EXACT SAME结果,而不会产生任何strtotime开销。

$thatTime = date_create_from_format('d/m/Y', $date)->getTimestamp();
if (time() - $thatTime > 86400) echo $date;

date_create_from_format()

的相关文档

答案 1 :(得分:2)

  

通过查看,可以消除m / d / y或d-m-y格式的日期   各个组件之间的分隔符:如果分隔符是a   斜线(/),然后是美国m / d / y;而如果   separator是短划线( - )或点(。),然后是欧洲d-m-y格式   假定。

strtotime()手册

所以一个简单的str_replace('/', '-', $date)应该可以解决问题。

答案 2 :(得分:0)

显而易见的答案是重新格式化字符串,如下所示:

$parts = explode('/',$dateStr);
if ((time() - strtotime("$parts[2]-$parts[1]-$parts[0]")) > 86400) {
  // do stuff
}

修改

然而,Marc B的答案更好,所以就这样做。

答案 3 :(得分:0)

如果你正在运行> PHP5,这就可以解决问题:

function in_past($date) {
    $date = explode("/", $date);
    $now = time();
    $date = strtotime($date[1]."/".$date[0]."/".$date[2]);
    return $date < $now;
}

用过:

$old_date = "23/01/1985";
if (in_past($old_date))
    echo 'so last season';
else 
    echo 'future';