php-работа с датами типа " каждые две недели по вторникам"
У меня есть приложение для веб-планирования, которое я в настоящее время переписываю, и у меня есть некоторые вопросы о том, как работать с повторяющимися встречами (я знаю, что нет недостатка в "что лучший способ сделать это", когда дело доходит до повторяющихся приложений).
поэтому я хочу предложить повторяющиеся встречи, где пользователь может назначить встречу, на свидание, как СБ, 2 июня, и он должен повторяться каждые две недели в субботу в течение некоторого заранее определенного периода времени (например, 1 год.)
какие функции php могут помочь мне определить, на какую дату приходится "каждая вторая суббота"? Я прикрепляю изображение моего пользовательского интерфейса для уточнения.
3 ответов
лично я хотел бы работать с DateTime объекты и использовать DateInterval класса.
в приведенном выше случае вам нужно разработать дату первой / следующей субботы, а затем просто работать с интервалом даты P2W
простой пример
$dow = 'saturday';
$step = 2;
$unit = 'W';
$start = new DateTime('2012-06-02');
$end = clone $start;
$start->modify($dow); // Move to first occurence
$end->add(new DateInterval('P1Y')); // Move to 1 year from start
$interval = new DateInterval("P{$step}{$unit}");
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
echo $date->format('D, d M Y'), PHP_EOL;
}
/*
Sat, 02 Jun 2012
Sat, 16 Jun 2012
Sat, 30 Jun 2012
Sat, 14 Jul 2012
…
Sat, 20 Apr 2013
Sat, 04 May 2013
Sat, 18 May 2013
Sat, 01 Jun 2013
*/
Ну, я бы сначала установил дату начала; когда этот день пришел, вы просто делаете:
$next_date = strtotime('+2 weeks');
Это получает вас в тот же день, но только две недели спустя. И цикл продолжается :)
вы можете использовать столбец базы данных для хранения времени в секундах:
UPDATE appointments SET dtime=UNIX_TIMESTAMP() WHERE id=5
затем вы можете проверить это значение везде, где только что прошел определенный период:
mysql_query("SELECT id FROM appointments WHERE dtime>='".(strtotime("-1 week"))."');
выбранные идентификаторы-1 неделя или более.