Проверьте на повторяющиеся даты - PullRequest
1 голос
/ 11 июня 2010

Я создаю календарь на PHP, и в базе данных есть дата, скажем, 6-10-10.

Иногда я повторяю события, которые хранятся как еженедельно повторяющиеся, поэтому, если дата 6-10-10, и я повторяю событие каждые две недели с того дня (включая этот день), как лучше всего находить даты на каждые две недели с 6-10-10?

Например, давайтескажем, дата 7-8-10, как я могу проверить, что дата соответствует моим критериям?

Ответы [ 4 ]

3 голосов
/ 11 июня 2010

Что случилось с циклом ?! Дискретная математика 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
}
1 голос
/ 11 июня 2010

Вы можете использовать функцию DATEDIFF .

Например

SELECT * FROM myTable WHERE ( DATEDIFF( myDate,  '2007-12-30' ) % 14 ) = 0
1 голос
/ 11 июня 2010

Если это для календаря, как насчет построения цепочки действительных дат, используя 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 голосов
/ 11 июня 2010

Не должно ли значение функции DATEDIFF в MySQL быть кратным 7 (для событий, повторяющихся каждую неделю) или 14 (для событий, повторяющихся каждые две недели) и т. Д.

...