date — PHP: получить следующие дни недели в зависимости от дня текущей недели, затем отобразить в метке графика

У меня есть график, который отображает еженедельные посещения сайта, значения в формате «d M Y» и данные будут возвращаться из базы данных.

В текущем состоянии отображать метки только за те дни, за которые я получил данные (например, 1 августа 2016 года и сегодня).

Я также вернул бы следующие дни в каждом ярлыке (для каждого дня недели), но имейте в виду текущий день недели (например, если среда должна вернуться 3 августа 2016 года, если четверг вернется 4 августа 2016 года) и т.д.) относительно текущего дня недели, поэтому, если это понедельник (и у меня есть данные), возвращает значение из базы данных, если это вторник (сегодня), возвращает данные из базы данных, но если это среда, то рассчитывается, что мы получил третий день недели, поэтому добавляет +1 к текущей дате, если это будет в четверг, добавляет +2 и т. д.
Я надеюсь, что объяснил как можно больше в результате я пытаюсь достичь

Я пытался сделать переключение PHP, но не могу достичь результата с помощью этого, и я думаю, что моя логика совершенно неверна.

function get_day($date,$daynum) {

$dayofweek = date("w",strtotime($date));

switch ($daynum) {
case '1':
if ($date == NULL) {
$current = date('d M Y',strtotime("$date +1 day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = date("d M Y",strtotime($date));
}
break;
case '2':
if ($date == NULL) {
$current = date('d M Y',strtotime("$date +2 day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = date("d M Y",strtotime($date));
}
break;
case '3':
if ($date == NULL) {
$current = date('d M Y',strtotime("$date +3 day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = date("d M Y",strtotime($date));
}
break;
case '4':
if ($date == NULL) {
$current = date('d M Y',strtotime("$date +4 day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = date("d M Y",strtotime($date));
}
break;
case '5':
if ($date == NULL) {
$current = date('d M Y',strtotime("$date +5 day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = date("d M Y",strtotime($date));
}
break;
case '6':
if ($date == NULL) {
$current = date('d M Y',strtotime("$date +6 day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = date("d M Y",strtotime($date));
}
break;
case '7':
if ($date == NULL) {
$current = date('d M Y', strtotime("$date +7 day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = date("d M Y",strtotime($date));
}
break;
}
return $current;
}

Я звоню с помощью

get_day($siteViewsThisWeek[0][1],'1');
get_day($siteViewsThisWeek[1][1],'2');
get_day($siteViewsThisWeek[2][1],'3');
[...]

Спасибо всем, кто может помочь.

0

Решение

Во-первых, в описании нет логики, поэтому неудивительно, что написать код сложно.
Я настоятельно рекомендую написать несколько тестов с различными перестановками входных параметров и ожидаемыми результатами для каждого случая.

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

Несколько замечаний о коде:

Вы никогда не используете $dayofweekи не совсем понятно, зачем вы это рассчитываете.

Далее конструкция вроде

if ($date == NULL) {
$current = date('d M Y',strtotime("$date +1 day"));
}

имеет мало смысла в использовании $date в strtotimeкак всегда там ноль.
Не говоря уже о значении этого расчета. В таком случае $date может быть пустым в вашей базе данных?
(Предполагается, что $siteViewsThisWeek[0][1] возвращается из базы данных)

Далее не совсем понятно, с чем вы пытаетесь рассчитать $current = date("d M Y",strtotime($date));, если $date уже есть дата в формате ‘d M Y’?

Наконец, в переключателе также нет особого смысла, так как вы повторяете код 7 раз без причины.

Функция равенства может быть записана так:

function get_day($date,$daynum) {
if (is_null($date)) {
$current = date('d M Y',strtotime("+$daynum day"));
} elseif ($date == date("d M Y")) {
$current = 'Oggi';
} else {
$current = $date;
}
return $current;
}

и вернет некоторую дату в будущем, когда $ date будет пустым, ‘Oggi’, если она соответствует текущей дате, и самой датой в противном случае.

Я намеренно не упомянул о более серьезных проблемах, таких как ретрансляция текущего времени, использование часового пояса по умолчанию из конфигурации php и т. Д. Это имеет значение только тогда, когда вы понимаете, чего пытаетесь достичь.

1

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

this will surely help you
<?php
$dt = new DateTime;
if(isset($_GET['year']) && isset($_GET['week'])) {
$dt->
setISODate($_GET['year'], $_GET['week']);}
else {
$dt->setISODate($dt->format('o'), $dt->format('W'));
}
$year = $dt->format('o');
$week = $dt->format('W');
?>
<a href="<?php echo $_SERVER['PHP_SELF'].'?week='.($week-  1) .
'&year='.$year; ?             >">Pre Week</a>
<a href="<?php echo $_SERVER['PHP_SELF'].'?week='.
($week+1).'&year='.$year;
?  >">Next Week</a>
<table>
<tr>
<td>Employee</td>
<?php
do{
echo "<td>" . $dt->format('l') . "<br>" . $dt->format('d M Y') . "</td>\n";
$dt->modify('+1 day');
}while ($week == $dt->format('W'));
?>
0

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