2010-06-10 43 views
1

我在PHP中創建日曆並在數據庫中有日期,比如6-10-10。檢查重複日期

有時候,我不得不重複事件,存儲爲每週重複,所以如果日期是10年6月10日,而我從那天起重複事件每兩週(包括該日)什麼是要找到最好的方式從6-10-10開始每兩週的日期?

舉例來說,假設日期是10年7月8日,我如何可以查看該日期符合我的標準是什麼?

回答

3

這是怎麼回事與循環?離散數學101:你如何確定數字是否是偶數? n%2==0

你如何計算出,如果日期是(呃...)的雙週? date%2weeks==0

折騰的偏移,你會得到(date-startdate)%2weeks

$startdate = strtotime("10 June 2010"); 
$otherdate = strtotime("8 July 2010"); 
$twoweeks = strtotime("+2 weeks") - time(); 
if($otherdate>$startdate && (($otherdate-$startdate)%$twoweeks)==0) { 
    // this is n * two weeks after 
} 
+0

+1,這是最好的和最短的解決方案 – 2010-06-10 22:46:00

+0

@Pekka - 謝謝你沒有采取我的循環刺拳個人:) – 2010-06-10 22:49:06

+0

沒問題,你是完全正確的:)這取決於使用 - 如果你需要生成日期投入一個日曆,你需要建立一個鏈。但這不是OP要求的。 – 2010-06-10 22:52:20

1

如果這是一個日曆,如何構建使用strtotime有效日期的鏈條?

// 10 dates every two weeks starting next thurdsay 

$valid_dates = array(); 
$date_counter = 0; 
$date_counter = strtotime("next thursday"); // I love being a lazy bastard! 

while ($i < 10) 
{ 
    array_push($valid_dates, $date_counter); 
    $date_counter = strtotime("+2 weeks", $date_counter); 
    $i++; 

} 

foreach ($valid_dates as $date) 
echo date("Y/m/d", $date)."<br>"; 

將輸出:

2010/06/17 
2010/07/01 
2010/07/15 
2010/07/29 
2010/08/12 
2010/08/26 
2010/09/09 
2010/09/23 
2010/10/07 
2010/10/21 
+0

這假設有效日期在某個時候結束。如果我的有效日期在將來無限(假設永遠每兩週重複一次)會怎麼樣? – kylex 2010-06-10 21:58:57

+0

@kylex是的,這是一個給定數量的日期的方法。 DATEDIFF方法對於這個特定的任務看起來更容易,如果這就是你所需要做的。你可能需要類似'strftime'的東西,儘管它變得更復雜,比如「每個月的第3個星期四」。 – 2010-06-10 22:00:55

1

可以使用DATEDIFF功能。

例如

SELECT * FROM myTable WHERE (DATEDIFF(myDate, '2007-12-30') % 14) = 0 
0

在MySQL中DATEDIFF功能的不應導致爲7的倍數(對於事件的每個星期的重複),或14(對於事件每兩週重複)等?