Отображать сообщение каждые 3 дня, используя PHP 7 - PullRequest
0 голосов
/ 25 января 2019

У меня просто проблема с отображением некоторой информации раз в три дня, следующие 500 лет или даже больше)).Например, я хочу отобразить сообщение «Здравствуйте, дорогие пользователи».Спасибо всем.

Скрипт не работает должным образом.Это работает только один раз, но мне нужно показать его через 500 лет или даже больше)).Спасибо всем.

<?php

   $this_day = date("d.m.Y");
   $start_date = "22.01.2019"; //-- just for example
   $display_date = date('d.m.Y', strtotime($start_date. ' + 3 days'));   

    if ($this_day == $display_date) {

    echo 'Hello dear users, last time you was here 3 days ago.';

    }
     ?>

Ответы [ 3 ]

0 голосов
/ 25 января 2019

создать 2 даты, найти разность, и если разность делится на 3, вы можете повторить это сообщение

$this_day = date('Y-m-d');
$start_date=date_create("2019-01-19");
$today = date_create($this_day);
$diff=date_diff($start_date,$today);
$day_diff = $diff->format("%a");
if($day_diff % 3 == 0){
    echo 'Hello dear users, last time you was here 3 days ago.';
}
0 голосов
/ 26 января 2019

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

<?php

for ($i = 1; $i <= 10; $i++) {
  echo $i % 3, "\n";
}

Это дает вывод:

1
2
0
1
2
0
1
2
0
1

Как видите, оно повторяется каждые 3 раза, даже если значение $i увеличивается бесконечно.

Далее вам необходимо вычислить значение для $i на основе сегодняшней даты. Вы можете использовать diff, чтобы сравнить сегодняшнюю дату с какой-то датой в прошлом, и это даст вам количество дней, которые вы можете по модулю.

Вот пример, в котором не используется сегодняшняя дата, а вместо этого используется дата, основанная на цикле for, чтобы вы могли четко видеть шаблон:

<?php

$reference_date = date_create("2000-01-01");

for ($i = 1; $i <= 10; $i++) {
  $date = date_create("2019-01-$i");
  $days_since_reference = $date->diff($reference_date)->format('%a');
  $modulo = $days_since_reference % 3;
  $show_message = $modulo == 0 ? "show message :)" : "don't show message";

  echo $date->format('Y-m-d') . " : $days_since_reference : $modulo : $show_message\n";
}

Вывод:

2019-01-01 : 6940 : 1 : don't show message
2019-01-02 : 6941 : 2 : don't show message
2019-01-03 : 6942 : 0 : show message :)
2019-01-04 : 6943 : 1 : don't show message
2019-01-05 : 6944 : 2 : don't show message
2019-01-06 : 6945 : 0 : show message :)
2019-01-07 : 6946 : 1 : don't show message
2019-01-08 : 6947 : 2 : don't show message
2019-01-09 : 6948 : 0 : show message :)
2019-01-10 : 6949 : 1 : don't show message
0 голосов
/ 25 января 2019

изменить if ($this_day == $display_date) { на if ($this_day >= $display_date) {

посмотрите на date_diff для вариантов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...