2010-07-30 132 views
8

我必須發送電子郵件時,用戶註冊電子郵件包含一個鏈接,在六個小時後變得無效 電子郵件發送時我正在做什麼我更新數據庫字段emailSentDate鍵入「日期時間」 現在我得到了curent日期和時間,並已對相同的犯人,因爲它是在分貝現在我想找到這兩個日期和時間有6小時不同,以便我可以使鏈接無效但我知道DONOT如何做到這一點如何減去兩個日期和時間來獲得差異

我的代碼看起來像使用硬編碼值分貝只是舉例該即時通訊

$current_date_time=date("Y-m-d h:i:s"); 
$current=explode(" ",$current_date_time); 
$current_date=$current[0]; 
$current_time=$current[1]; 
$db_date_time="2010-07-30 13:11:50"; 
$db=explode(" ",$db_date_time); 
$db_date=$db[0]; 
$db_time=$db[1]; 

我不知道如何着手plz幫助

+0

請參閱http://stackoverflow.com/search?q=subtract+dates+php – Gordon 2010-07-30 11:33:53

回答

1

我寧願與時間戳工作:保存這是由「時間返回的值() 「as」savedTime「到你的數據庫(這是一個以秒爲單位的時間戳)。當你檢查你的六個小時時,從「time()」中減去那個數字。

if ((time() - savedTime) > 6 * 3600) // more than 6h ago

"SELECT FROM table WHERE savedTime < " . (time() - 6 * 3600)

+0

不確定它是否回答了這個問題,但這是我尋找的答案 – 2014-02-25 02:24:27

18
<?php 
//$now = new DateTime(); // current date/time 
$now = new DateTime("2010-07-28 01:11:50"); 
$ref = new DateTime("2010-07-30 05:56:40"); 
$diff = $now->diff($ref); 
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i); 

打印2 days, 4 hours, 44 minutes

看到http://docs.php.net/datetime.diff

編輯:但你也可以更多轉移問題的數據庫方面,例如通過在表中存儲過期日期/時間,然後執行如下查詢:
... WHERE key='7gedufgweufg' AND expires<Now()
許多rdbms對日期/時間算術具有合理/良好的支持。

+0

嗯,這似乎不適用於所有版本的PHP。我沒有'diff()'方法... – 2014-07-22 17:01:53

+0

沒錯。該手冊說2009年6月發佈的'(PHP 5> = 5.3.0)';-) – VolkerK 2014-07-23 07:30:38

+0

我知道,瘋了: - /我應該改變我的託管服務提供商,我猜...我有5.2.x – 2014-07-23 07:44:35

3

你可以做的是將兩個日期轉換爲Unix epoch times,即自1969年12月31日午夜以來的等效秒數。由此可以輕鬆推斷兩個日期之間所經過的時間量。要做到這一點,你可以使用mktime()strtotime()

一切順利。

2

$ hoursDiff =(time() - strtotime(「2010-07-30 13:11:50」))/(60 * 60);

+0

你r從保存的時間和結果中減去當前日期的時間是幾小時? – user403269 2010-07-30 11:59:17

+0

嘿它是創造同一天的問題假設我必須找到當天的差異它導致負值 – user403269 2010-07-30 12:23:31