date — в php, как я могу использовать оператор приращения в сочетании с переменной без выполнения операции приращения?

У меня есть конкретная дата — для этого примера, скажем, 6 июля. Она выпадает на 27 неделе 2016 года.
Используя PHP 5.5.9, я пытаюсь вернуть 7 дат, которые происходят на этой неделе, используя следующую функцию:

function getStartAndEndDate($week, $year) {
$i=0;
$dto = new DateTime();
$ret[$i] = $dto->setISODate($year, $week)->format('Y-m-d');
$i++;
while ( $i < 7 ){
$ret[$i] = $dto->modify('+' . $i .  ' days')->format('Y-m-d');
$i++;
}
return $ret;
}

Я ожидаю список из 7 последовательных дат с 2016-07-04 по 2016-07-10

Вместо этого я получаю следующие даты:
2016-07-04, 2016-07-05, 2016-07-07, 2016-07-10 2016-07-14 2016-07-19, 2016-07-25

Я считаю, что следующая строка является источником моей проблемы:

$ret[$i] = $dto->modify('+' . $i .  ' days')->format('Y-m-d');

Когда я указываю статические значения, код работает.

Любые предложения или идеи будут оценены.

Спасибо

0

Решение

В строке ниже вместо $ я использую только 1.

Ваша линия

$ret[$i] = $dto->modify('+' . $i .  ' days')->format('Y-m-d');

использование

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d');

Причина этого в том, что когда вы используете функцию модификации, она изменяет сам объект даты. Таким образом, если изначально дата была 2016-07-04, то при использовании modify («+ $ i days») [$ i = 1] это будет 2016-07-05, но когда на следующем шаге вы измените («+ $ i days «) [$ i = 2] он будет считаться с 2016-07-05 и даст вам 2016-07-07, и это будет продолжаться.

0

Другие решения

modify метод действительно модифицирует $dtoТаким образом, в следующей итерации вы не имеете дело с тем же $dto значение, как в предыдущей итерации.

Итак, на самом деле это упрощает вашу задачу, так как вы можете просто добавлять 1 день каждый раз:

$ret[$i] = $dto->modify('+1 days')->format('Y-m-d');
3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector