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


Compare current date with a date in d/mm/yyyy format in PHP

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

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

strtotime('now')是对该功能的可怕滥用。您应该只使用time()来获得完全相同的结果,而不需要任何strtotime开销。

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

date_create_from_format()相关文档

m/d/y或d-m-y格式的日期通过查看来消除歧义各个组件之间的分隔符:如果分隔符是a斜杠(/),则采用美式的m/d/y;然而,如果分隔符是一个破折号(-)或点(.),然后是欧洲的d-m-y格式假定.

strtotime()手册

所以一个简单的str_replace('/', '-', $date)就可以了

显而易见的答案是像这样重新格式化字符串:

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

编辑

但是,Marc B的答案更好,所以就这么做吧。

如果您运行的是>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';