如何比较日期字符串和日期
问题描述:
我在我的SQL中有一个字段。例如:如何比较日期字符串和日期
field : expireddate type : varchar (10)
它将包含诸如$ expireddate = 31/08/2014数据,我将它与今天的日期
$today = date("d/m/Y");
if ($query['expireddate']<$today){
echo 'expired date';
}
else
{
echo 'uptodate';
}
比较,但它无法正常工作。我试图将字符串转换为日期:
$expireddate=strtotime('d/m/Y','$query[expireddate]')
但它仍然无法正常工作。
有什么建议吗?
答
但是,如果您只是用“ - ”替换“/”,它将正常工作。
<?php
$expireddate = "31/08/2014";
$today = date("d/m/Y");
$expireddate=strtotime(str_replace('/', '-', $expireddate));
$today=strtotime(str_replace('/', '-', $today));
if ($expireddate<$today){
echo 'expired date';
}
else
{
echo 'uptodate';
}
?>
答
没有必要替换字符串中的字符或使用strtotime()
这不建议用于日期数学。 PHP内置的工具旨在使这种事情变得简单。
您应该使用DateTime()
对象,因为它们具有可比性。但是,您将遇到的一个问题是您的日期格式不符合标准。当使用/
作为分隔符时,PHP将采用MM/DD/YYYY格式。所以你需要使用DateTime::createFromFormat()
来克服这个问题。
$today = new DateTime();
$expires = DateTime::createFromFormat('d/m/Y', $query['expireddate']);
if ($expires < $today){
echo 'expired date';
}
else {
echo 'uptodate';
}
建议:不要将日期作为字符串存储在数据库中。更重要的是,不要将它们存储为非标准格式。它是微不足道的在查询数据库时将日期转换为您想要的任何格式,并且可以充分利用数据库的所有日期功能,而这些功能在字符串时是无法做到的(至少不是不必先操作那些字符串使事情变得更加复杂)。
当然,这是行不通的,因为字符串是从左到右按字符进行比较的,在这方面'dd/mm/yyyy'不是一个“可排序”的格式 - 您需要类似'yyyy /毫米/ dd'。但最好不要将日期作为文本存储在首位,而要使用DBMS为其提供的指定类型之一...然后在查询内部进行比较,而后在PHP中进行比较(看起来像什么)。 – CBroe 2014-08-31 15:02:33