2012-03-18 130 views
0

我有一個包含存儲在其中的日期時間數據的MySQL表。 我需要知道自給定時間以來30天過去了。 我該怎麼做?PHP/MySQL:日期時間計算?

樣機代碼:

$query = mysql_query("SELECT data FROM myTable LIMIT 1"); 
$row = mysql_fetch_array($query); 
if(days_passed($row['date'], 30)) 
    echo "30 days has passed since the given date time."; 
+1

簡短的回答:* WHERE日期>「2012-04-17」 *( date('Ym-d',strtotime('today + 30 days'))*)長答案:很多方法。 – Corbin 2012-03-18 08:07:03

+1

'date'字段的格式/數據類型是什麼? – Starx 2012-03-18 08:12:18

+1

@corbin,這是一個答案,你應該添加它作爲答案而不是評論。 – 2012-03-18 08:13:32

回答

3

直接回答這個問題,你可以在你的if語句使用此功能。

function days_passed($date, $days) { 
    $old = new DateTime($date); 
    $now = new DateTime(); 
    $interval = $old->diff($now); 
    return ($interval->days >= $days); 
} 

如果提供的日期和現在的日期之間的差異> =第二個參數中提供的天數,那麼將返回true。

但是,您可能更願意使用SQL來執行此操作。

+0

如果你想知道天數,最好使用'$ interval-> days'。 '$ interval-> d'返回一個在'1個月和5天'等語句中很有用的數字。 – Arjan 2012-03-18 08:19:02

+0

@Arjan woops - 更正了,謝謝。 – 2012-03-18 08:19:37

2

您可以只選擇直接從數據庫中的結果;

SELECT *, ADDDATE(`date`, INTERVAL 30 DAY) < NOW() more_than_30_days_ago 
FROM myTable LIMIT 1; 

然後使用類似的東西;

if($row['more_than_30_days_ago']) 
    echo "30 days has passed since the given date time."; 

簡單演示數據庫部分here

0

下面是用PHP:

$days = 30; 
if(date('Y-m-d', strtotime("{$row['date']} +{$days}day")) < date('Y-m-d')) 
    echo "More than 30 days has passed"; 
1
$date = date('Y-m-d', strtotime('today + 30 days')); 
$query = mysql_query("SELECT date FROM tbl WHERE date > '{$date}' LIMIT 1"); 
if (mysql_num_rows($query)) { ... } 

在你的問題,你只是拉數據來檢查它,所以你甚至不需要拉它。只需使用WHERE子句,然後如果拉出一行,就會發現它已被找到。

(如果你確實需要再處理數據,或其他條件都參與,其他的答案之一是可能會更好。)