Используйте PHP для отображения нового элемента списка каждые 14 дней - PullRequest
2 голосов
/ 18 января 2020

Я работаю со следующим кодом, чтобы отображать новый элемент списка каждые 14 дней. Дата начала 2020-02-01 , а дата окончания 2020-12-31 . Элементы списка не будут отображаться в день начала. На 2020-02-15 будет отображаться первый элемент списка. На 2020-02-29 будет отображаться второй элемент списка. Это будет продолжаться каждые 14 дней, пока не будет достигнута конечная дата.

Элементы списка поступают из WordPress l oop, поэтому я не уверен, может ли этот код быть включен в запрос WP с использованием date_query или следует хранить отдельно и запускать после запроса.

<?php
// Set the default timezone.
date_default_timezone_set('America/Edmonton');

$startDate = new DateTime('2020-02-01 00:00:00');
$endDate = new DateTime('2020-12-31 00:00:00');
$dateRange = new DatePeriod($startDate, new DateInterval('P14D'), $endDate);
$b = new DateTime('-14 days');
?>

<ul>
<?php foreach($dateRange as $date): ?>
    <?php $diff = $date->diff($b); ?>
    <?php if($diff->days <= 14): ?>
        <li>
            <?php echo $date->format('Y-m-d'); ?>
        </li>
    <?php endif; ?>
<?php endforeach; ?>
</ul>

Текущий вывод

  • 2019-12-29
  • 2020-01 -12

Вывод не такой, как ожидалось, и мне нужна некоторая помощь в исправлении моего кода, так как я PHP новичок.

Любая и вся помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Я проверил это, и оно работает:

<?php
// Set the default timezone.
date_default_timezone_set('America/Edmonton');

$startDate = new DateTime('2020-02-01 00:00:00');
$startDate->modify('+14 days');
$endDate = new DateTime('2020-12-31 00:00:00');
$dateRange = new DatePeriod($startDate, new DateInterval('P14D'), $endDate);
?>
<ul>
<?php foreach($dateRange as $date) { ?>
        <li>
            <?php echo $date->format('Y-m-d'); ?>
        </li>
<?php } ?>
</ul>

Я добавил $endDate->modify('+14 days');, который изменяет временную метку (добавляет 2 недели к временной метке). И поскольку $dateRange возвращает временную метку ровно каждые 2 недели, я удалил оператор if. Вы можете узнать больше о date->modify() здесь .

0 голосов
/ 18 января 2020

Как насчет:

// We start at your given start date
$startDate = new DateTime("2020-02-01");
// We define a date when to stop additional list items
$endDate = new DateTime("2020-12-31");
// We define the current time
$now = new DateTime();

// Modify date on the fly, by given time frame (readability)
// Ensures to display dates only between start+14day && end
while ($startDate->modify("+14 days") < $now && $startDate < $endDate) {
    echo '<li>' . $startDate->format("Y-m-d") . '</li>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...