检查给定日期 - 字符串d/mm/yyyy是否过去的最佳方法是什么? 当我使用strtotime()时,由于非美式符号,它不能很好地工作。 当然,我可能会将日期作为字符串进行处理并比较子字符串,但必须有更好的方法。在PHP中比较当前日期与d/mm/yyyy格式的日期
if((strtotime('now')-strtotime($date)) > 86400) echo $date;
检查给定日期 - 字符串d/mm/yyyy是否过去的最佳方法是什么? 当我使用strtotime()时,由于非美式符号,它不能很好地工作。 当然,我可能会将日期作为字符串进行处理并比较子字符串,但必须有更好的方法。在PHP中比较当前日期与d/mm/yyyy格式的日期
if((strtotime('now')-strtotime($date)) > 86400) echo $date;
日期/ d/y或DMY格式通过查看 的各种组件之间的分隔符消除歧义:如果分离器是 斜杠(/),则美国米/ d/y为假定;而如果 分隔符是破折号( - )或点(。),则假定欧洲的d-m-y格式为 。
因此,一个简单str_replace('/', '-', $date)
应该做的伎俩。
strtotime('now')
是一个可怕的滥用职能。您只需使用time()
即可获得“完全相同”结果,而不会产生任何费用开销。
$thatTime = date_create_from_format('d/m/Y', $date)->getTimestamp();
if (time() - $thatTime > 86400) echo $date;
编辑,包括一个' - > getTimestamp()'调用,无需此不起作用(不能从'int'中减去'DateTime')。 Upvoters,请不要盲目投下你的票(编辑后投下我的票)。 – Jon
好相关的文档显而易见的答案是重新格式化像这样的字符串:
$parts = explode('/',$dateStr);
if ((time() - strtotime("$parts[2]-$parts[1]-$parts[0]")) > 86400) {
// do stuff
}
编辑
然而,马克·B的回答是好,这样做。在第m
如果你正在运行> 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';
谢谢,这个简单的技巧的作品。 – user965748