PHP: Как получить предыдущее воскресенье определенной даты в прошлом ..?

Я получаю запись из базы данных с датой, связанной с ней.

Я хочу иметь возможность получить предыдущее воскресенье и следующую субботу относительно этой конкретной даты для заполнения jQuery datepicker.

Я знаю, как это сделать с фактическим временем / датой:

strtotime('last Sunday') 

но я не знаю, как это сделать на дату, отличную от сегодняшней …

Благодарю.

Related of "PHP: Как получить предыдущее воскресенье определенной даты в прошлом ..?"

Используйте второй аргумент strtotime чтобы указать дату для расчета «последнего воскресенья» и других относительных дат:

 strtotime('last Sunday', strtotime('09/01/2010')); 

http://us2.php.net/strtotime

Пример:

 echo date('m/d/Y', strtotime('last Sunday', strtotime('09/01/2010'))); 

Вывод:

 08/29/2010 

Вы также можете использовать класс datetime для этого. Код ниже будет работать:

 $ date = new DateTime ('09 / 01/2010 ');
 $ date-> изменить ('последнее воскресенье');
 echo $ date-> format ('d / m / Y');
 Output: 29/08/2010 

Посмотрите http://ca2.php.net/manual/en/class.datetime.php . Конструктор принимает два необязательных аргумента, первый из которых является строкой даты для объекта (по умолчанию – по умолчанию), а второй – объект DateTimeZone (по умолчанию используется часовой пояс, заданный в PHP.ini). Затем метод изменения изменяет дату, используя те же выражения, что поддерживает strtotime (), и формат форматирует дату, используя те же строки формата, что и date (). В основном это делает то же самое, что и пример pygorex1, но использует объектно-ориентированный синтаксис.

Вы можете использовать смещение дневного дня. В PHP для произвольной даты:

 <?php define('SEC_IN_DAY', (24*60*60)); $d = strtotime('2013-04-15'); // "w" is the day of the week. 0 for Sunday through 6 for Saturday $delta_sun = -date('w', $d); $delta_sat = $delta_sun + 6; echo 'The day ' . date('Ymd H:i:s', $d) . "\n"; echo 'Last Sunday '. date('Ymd H:i:s', $d + $delta_sun * SEC_IN_DAY) . "\n"; echo 'Next Saturday '. date('Ymd H:i:s', $d + $delta_sat * SEC_IN_DAY) . "\n"; 

То же самое в MySQL:

 SET @d := '2013-04-15'; SET @delta_sun := -DATE_FORMAT(@d, '%w'); SET @delta_sat := @delta_sun + 6; SELECT 'The day' AS `name`, DATE(@d) AS `date` UNION ALL SELECT 'Last Sunday' AS `name`, DATE_ADD(@d, INTERVAL @delta_sun DAY) AS `date` UNION ALL SELECT 'Next Saturday' AS `name`, DATE_ADD(@d, INTERVAL @delta_sat DAY) AS `date`