2014-08-31 86 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'; 
} 

建議:不要將日期作爲字符串存儲在數據庫中。更重要的是,不要將它們存儲爲非標準格式。它是微不足道的在查詢數據庫時將日期轉換爲您想要的任何格式,並且可以充分利用數據庫的所有日期功能,而這些功能在字符串時是無法做到的(至少不是不必先操作那些字符串使事情變得更加複雜)。