2014-08-31 60 views
0

我在我的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]') 

但它仍然无法正常工作。

有什么建议吗?

+0

当然,这是行不通的,因为字符串是从左到右按字符进行比较的,在这方面'dd/mm/yyyy'不是一个“可排序”的格式 - 您需要类似'yyyy /毫米/ dd'。但最好不要将日期作为文本存储在首位,而要使用DBMS为其提供的指定类型之一...然后在查询内部进行比较,而后在PHP中进行比较(看起来像什么)。 – CBroe 2014-08-31 15:02:33

回答

0

但是,如果您只是用“ - ”替换“/”,它将正常工作。

<?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'; 
} 

?> 
0

没有必要替换字符串中的字符或使用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'; 
} 

建议:不要将日期作为字符串存储在数据库中。更重要的是,不要将它们存储为非标准格式。它是微不足道的在查询数据库时将日期转换为您想要的任何格式,并且可以充分利用数据库的所有日期功能,而这些功能在字符串时是无法做到的(至少不是不必先操作那些字符串使事情变得更加复杂)。