PHP: Как получить предыдущее воскресенье определенной даты в прошлом? - PullRequest
17 голосов
/ 18 сентября 2010

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

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

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

strtotime('last Sunday')

но я не знаю, как это сделать на свидание, отличное от нынешнего ...

Спасибо.

Ответы [ 3 ]

45 голосов
/ 18 сентября 2010

Используйте второй аргумент 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
17 голосов
/ 18 сентября 2010

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

$date = new DateTime('09/01/2010');
$date->modify('last Sunday');
echo $date->format('d/m/Y');
Output: 29/08/2010

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

0 голосов
/ 14 апреля 2013

Вы можете использовать смещение дня недели.В 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('Y-m-d H:i:s', $d) . "\n";
echo 'Last Sunday '. date('Y-m-d H:i:s', $d + $delta_sun * SEC_IN_DAY) . "\n";
echo 'Next Saturday '. date('Y-m-d 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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...