Проверьте наличие повторяющихся дат
Вопрос
Я создаю календарь в PHP, а в базе данных есть дата, скажем, 6-10-10.
Иногда у меня повторяющиеся события, хранящиеся в качестве еженедельных повторов, поэтому, если дата составляет 6-10-10, и я повторяю событие каждые две недели с того дня (включая этот день), какой лучший способ найти даты каждые два Недели с 6-10-10?
Например, скажем, дата 7-8-10, как я могу проверить, чтобы эта дата соответствует моим критериям?
Решение
Что случилось с петлей?! Дискретная математика 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
}
Другие советы
Ты можешь использовать Dateiff. функция.
Например
SELECT * FROM myTable WHERE ( DATEDIFF( myDate, '2007-12-30' ) % 14 ) = 0
Если это для календаря, как насчет создания цепочки действительных дат, используя 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
Не должен результат Dateiff. Функция в MySQL была кратным 7 (для событий, повторяющихся каждую неделю), или 14 (для событий, повторяющихся каждые две недели) и т. Д.?