Как получить названия дней между датами, используя цикл for в php - PullRequest
0 голосов
/ 16 декабря 2018

Я пишу следующий код для получения результатов: -

$date_from = date('2018-12-14');
$date_from = strtotime($date_from);
$date_to = date('2018-12-16');
$date_to = strtotime($date_to);
for ($i=$date_from; $i<=$date_to; $i+=86400)
{
    echo $date = date("d-m-Y", $i).' - ';
    echo $dayName = date('l', strtotime($date)).'<br>';
}

Мои ожидаемые результаты такие же: -

14-12-2018 - Friday 
15-12-2018 - Saturday 
16-12-2018 - Sunday

Но я получаю следующее: -

14-12-2018 - Thursday 
15-12-2018 - Thursday 
16-12-2018 - Thursday

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Я использую DateTime(), и связанные с ним классы делают это намного проще.Просто создайте начальную и конечную дату с интервалом ne дня и используйте цикл, чтобы вывести дни.

$start = new DateTime('2018-12-14');
$end   = (new DateTime('2018-12-16'))->modify('+1 day');
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
    echo "{$date->format('d-m-Y - l')}<br>";
}

$start является объектом DateTime() и представляетстартовый день.$end - последний день цикла.Вы должны добавить к нему один день, поскольку циклы DatePeriod не включают последний день.$interval - это объект DateInterval(), представляющий интервал, через который мы хотим пройти.В этом случае срок один день.$period является объектом DatePeriod() и представляет всю эту информацию в итерируемом объекте.Оттуда вы просто просматриваете его, и с помощью объекта DateTime(), который вам предоставляется, вы просто форматируете как обычно.

Результат:

14-12-2018 - Friday
15-12-2018 - Saturday
16-12-2018 - Sunday

Демо

Примечание. В этом решении учитывается переход на летнее время и високосный год.

0 голосов
/ 16 декабря 2018

Когда вы смешиваете echo и задания, вы заканчиваете с

echo $date = date("d-m-Y", $i).' - ';

с $date как 14-12-2018- (дополнительные - в конце).Когда вы попытаетесь преобразовать это обратно в дату в следующей строке, произойдет сбой.

Разделите их, и это должно сработать ...

for ($i=$date_from; $i<=$date_to; $i+=86400)
{
    $date = date("d-m-Y", $i);
    $dayName = date('l', strtotime($date));
    echo $date .'-'. $dayName.'<br>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...