我在PHP中創建日曆並在數據庫中有日期,比如6-10-10。檢查重複日期
有時候,我不得不重複事件,存儲爲每週重複,所以如果日期是10年6月10日,而我從那天起重複事件每兩週(包括該日)什麼是要找到最好的方式從6-10-10開始每兩週的日期?
舉例來說,假設日期是10年7月8日,我如何可以查看該日期符合我的標準是什麼?
我在PHP中創建日曆並在數據庫中有日期,比如6-10-10。檢查重複日期
有時候,我不得不重複事件,存儲爲每週重複,所以如果日期是10年6月10日,而我從那天起重複事件每兩週(包括該日)什麼是要找到最好的方式從6-10-10開始每兩週的日期?
舉例來說,假設日期是10年7月8日,我如何可以查看該日期符合我的標準是什麼?
這是怎麼回事與循環?離散數學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
}
如果這是一個日曆,如何構建使用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
這假設有效日期在某個時候結束。如果我的有效日期在將來無限(假設永遠每兩週重複一次)會怎麼樣? – kylex 2010-06-10 21:58:57
@kylex是的,這是一個給定數量的日期的方法。 DATEDIFF方法對於這個特定的任務看起來更容易,如果這就是你所需要做的。你可能需要類似'strftime'的東西,儘管它變得更復雜,比如「每個月的第3個星期四」。 – 2010-06-10 22:00:55
在MySQL中DATEDIFF功能的不應導致爲7的倍數(對於事件的每個星期的重複),或14(對於事件每兩週重複)等?
+1,這是最好的和最短的解決方案 – 2010-06-10 22:46:00
@Pekka - 謝謝你沒有采取我的循環刺拳個人:) – 2010-06-10 22:49:06
沒問題,你是完全正確的:)這取決於使用 - 如果你需要生成日期投入一個日曆,你需要建立一個鏈。但這不是OP要求的。 – 2010-06-10 22:52:20