2010-06-10 35 views
1

我需要比較兩個日期,以顯示編輯鏈接,如果它是在PHP發佈後5分鐘內。如果超過5分鐘,不要顯示任何內容。比較兩個日期/時間,以確定兩次之間是否已經過了5分鐘php

$answer_post_date = get_the_time("Y-m-d"); 

$current_date = date("Y-m-d"); 

$formated_current_date = strtotime($answer_post_date); 
$formated_answer_post_date = strtotime($current_date); 

在這一點上我有兩個值:

 
1274414400 ($formated_current_date) 
1276056000 ($formated_answer_post_date) 

我不知道下一步該怎麼做檢查,如果當前的日期/時間>從應答發佈日期5分鐘。

任何建議將是偉大的。

我真的需要的答案是一個布爾(是/否),如果是,顯示左邊的小步顯示要編輯的鏈接。

回答

1

您只處理日期,您應該如何知道差異是否爲5分鐘?

無論如何,我會說使用默認PHP函數的大部分PHP代碼至少有些破碎。問題是,儘管unix時間戳存儲了正確的時間點,但它並不存儲時區信息。見here

因此,忘記只使用datestrtotime。使用datetime extension

在數據庫中存儲Unix時間戳和時區(按時區指我的意思,例如Europe/Lisbon)。然後:

$tz = new DateTimeZone($timezone); 
$answer_post_date = new DateTime("$timestamp"); 
$answer_post_date->setTimeZone($tz); 
$current_date = new DateTime("now", $tz); 

$diff = $current_date->diff($answer_post_date); 
if ($diff->format("a") > 0 || 
     $diff->format("h") > 0 || 
     $diff->format("m") >= 5) { 
    //more than 5 minutes have passed 
} 

當然,對於比較日期,你總是可以比較時間戳。

+0

我沒有那個時區,我只是有worpdress get_the_time()模仿日期() – estern 2010-06-10 01:00:44

+0

@estern我只是在做一個更大的點。傳遞'DateTime'構造函數沒有時區,它將使用默認值,就像'date'一樣。 – Artefacto 2010-06-10 01:09:19

+0

這是對於php5的權利?我正在運行4.4.9 – estern 2010-06-10 01:14:10

2

我的,你需要做的事情的理解:

$delta = ($formated_current_date - $formated_answer_post_date)/60; // in minutes 
if ($delta < 5) { 
    // show $delta 
} 

編輯:與其他人一樣指出,這本身並不能解決所有的問題在眼前。正如我所看到的,對當前代碼的最小更改是使用粒度更高的日期格式 - 例如"Y-m-d H:i:s"。像其他人指出的那樣,這足以取決於與系統處於同一時區的日期。

+0

問題是他的時間戳不包括時間信息。 – Artefacto 2010-06-10 02:59:23

+0

我同意這是他的一個問題..我解釋了這個問題,因爲他需要比較語法的提示。 – 2010-06-10 03:24:19

0

我不認爲有必要對字符串格式進行往返,無論其效率或可靠性如何。

date()將默認調用time(),你可以直接調用,並獲得當前時間,以秒爲Unix紀元時間戳(這是你想在$formated_answer_post_date與落得什麼)。您需要查看WordPress文檔才能根據帖子的價值找到相應的等價物。

然後,你可以做一個簡單的比較秒。 5分鐘是300秒。

您仍然需要檢查代碼是否可以假定兩個值的時區是相同的。

+0

感謝您的信息。我沒有想到時區的變量,@Artefacto指出了這一點。我認爲我將改變我的遊戲計劃,讓該用戶在帖子完成後隨時編輯。 – estern 2010-06-10 03:20:27

相關問題