2014-06-19 56 views
0

我目前正在製作一個系統,它需要知道某個變量是否已存儲不到3天前,如果有,返回true 。當變量最初保存時,它被設置爲數字格式的日期('N'),即星期幾。 (1 =星期一,7 =根據php文檔星期日)PHP檢查後3個計數(日期)(週期1-7)

但是,我怎麼會發現它已經是3天或更多天了?我的主要困境是:如果變量是第5天,並且它是當前第4天,這意味着1周的週期幾乎完成(已過去6天) - 但是我無法弄清楚如何在php中執行此操作。另一個例子是變量是第7天,現在是第1天 - 從數字上講,這兩個值之間有6「天」,但實際上,它只有一天,因爲在7到1之後。1

PS我每週都重置這些值,這就是爲什麼我不打算保存月份或年份等東西的原因。

+0

你就不能啞成完成日期時間,然後比較他們兩個?就像'new DateTime(date('Y')。「 - 」。date('m')。「 - 」。$ yourdate。「00:00:00」);'然後只是區分它們? – Steven

+0

或使用unix時間戳。如果差值大於3(天)* 24(小時/天)* 3600(秒/小時),那麼......這使得數學變得如此簡單(所有整數)。 – Kryten

+0

這是非常簡單的數學。你至少能證明你到目前爲止所嘗試過的嗎? –

回答

1

這其實在目前的狀態下解決了數學的幫助。我們先來看看不錯不好值。存儲在1

  • 良好:2,3,4 :1,5,6,7
  • 存儲在2良好:3,4,5 : 1,2,6,7
  • 存儲在6良好:7,1,2 :3,4,5,6
  • 存儲在7:1,2,3 :4,5,6,7

如果減去從當前的存儲值,你會看到good - stored = 1, 2 or 3標準的情況下(不重疊)和good - stored = -6, -5, -4(最大重疊)。

同時bad - stored = 4, 5, 6 or 0(無重疊)和bad - stored = -3, -2, -1 or 0(最大重疊)。

所以,你想你的結果是無論是在區間[1,3]或[-6,-4],這可能是這樣

//somwhere $storedN is defined 
$todayN = date('N'); 
$result = $todayN - $storedN; 
if (($result > 0 && $result < 4) || ($result > -7 && $result < -3)) { 
//   no overlap      overlap 
    // valid 
} 
0

假設你保存日期爲字符串,一個方法是使用劃時代時間:

echo time(); //1403218504 

的大量你看到的是自1月1日的秒數,1970年

有一天3600 * 24秒。因此,當您保存劃時代的時間你的「變量」的約會,看它是否超過3天前,你可以做

$one_day = 3600*24; 

$now = time(); 
$before = $your_old_time; 

if ($now - $before > ($one_day * 3)) { 
    //$before is older than 3 days 
}