PHP получает следующие дни недели в зависимости от текущего дня недели

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

Например: сегодня понедельник, поэтому я получаю 2016-06-20 в качестве значения столбца, но имя следующего столбца равно 0, потому что у меня нет данных на следующие дни.

Индекс диаграммы должен быть таким:

|| 20 Jun 2016 || 21 Jun 2016 || 22 Jun 2016 || 23 Jun 2016 || etc.

И теперь я получил это:

|| 20 Jun 2016 || 1 Jan 1970 || 1 Jan 1970 || 1 Jan 1970 || etc.

Итак, я попытался заполнить недостающие дни с помощью этой функции:

function get_day($count) {
    if ($count == NULL) {
        $dweek = date("w");
        for ($i = 1; $i <= 6; $i++) {
            echo $i;
            switch ($i) {
                case 1:
                    $day = $dweek+1;
                    break;
                case 2:
                    $day = $dweek+2;
                    break;
                case 3:
                    $day = $dweek+3;
                    break;
                case 4:
                    $day = $dweek+4;
                    break;
                case 5:
                    $day = $dweek+5;
                    break;
                case 6:
                    $day = $dweek+6;
                    break;
            }
        }
        $current = date("d M Y",strtotime("+$day day"));
    } else {
        $current = date("d M Y",strtotime($count));
    }
    return $current;
}

Но используя это сейчас, я получил:

|| 20 Jun 2016 || 27 Jun 2016 || 27 Jun 2016 || 27 Jun 2016 || etc.

Итак, я что-то упускаю, но через 2 часа я не вижу, как это сделать.

Спасибо за помощь.


person andreaem    schedule 20.06.2016    source источник
comment
Возврат внутри switch() — плохая идея, и функция может возвращать только одно значение один раз.   -  person Marcos Pérez Gude    schedule 20.06.2016
comment
Итак, для упрощения: у вас есть дата начала, и вам просто нужно сгенерировать следующие шесть дней после этой даты начала?   -  person jszobody    schedule 20.06.2016
comment
Ваша логика немного неверна. Пожалуйста, введите код, который вы вызываете и используете эту функцию. Я починю это.   -  person Mojtaba    schedule 20.06.2016
comment
@jszobody Точно.   -  person andreaem    schedule 20.06.2016
comment
@Mojtaba Я буду называть это простой передачей строки в get_day(), полученной из базы данных.   -  person andreaem    schedule 20.06.2016
comment
@andreaem, я не могу понять, почему ты возвращаешь $day. Итак, мне нужно больше кода. Вы можете обновить свой вопрос   -  person Mojtaba    schedule 20.06.2016
comment
@Mojtaba была опечаткой, я хочу поместить $day в strtotime(+n day); но, используя это, я получил только последний день переключения (например, 27 июня). Я обновил свой вопрос.   -  person andreaem    schedule 20.06.2016
comment
@andreaem, у тебя еще есть непонятные действия. Во-первых, вам нужно удалить строку, которая возвращает $day. Во-вторых, почему ваш «цикл for» равен 7, но у вас нет для этого случая? В-третьих, почему вы используете цикл. На самом деле в вашем коде $day всегда $dweek+6 . Вот почему я прошу вас добавить больше кода. Не волнуйся. Никто не украдет ваш код.   -  person Mojtaba    schedule 20.06.2016
comment
углерод? почему ты не используешь карбон?   -  person Achraf Khouadja    schedule 20.06.2016
comment
@Mojtaba 1: я удалил возврат, 2: еще одна опечатка, исправьте. 3: Я хочу использовать цикл для цикла $day++. Я не добавляю больше кода, потому что я думаю, что люди воруют, вот почему больше нечего вставлять, я использую get_day($siteViewsThisWeek[1][1]); которые отправляют в функцию строку типа 2016-06-20 ничего более   -  person andreaem    schedule 20.06.2016
comment
Можно было бы похудеть. Пожалуйста, поместите строку кода оператора if   -  person Mojtaba    schedule 20.06.2016


Ответы (2)


С использованием datetime и datetime.modify :

$res = "|| ";

for ($d = 1; $d < 8; $d++) {
    $dt = new DateTime();
    $m = $dt->modify("+$d days");
    $f = $m->format("d M Y");
    $res .= $f . " || ";
}

echo $res;
person Denis Giffeler    schedule 20.06.2016
comment
Я пытаюсь сделать эту функцию get_day($count) { if ($count == NULL) { for ($d = 0; $d ‹ 6; $d++) { $current = ((new DateTime())- ›modify(+$d days))-›format('d M Y'); s} } else { $current = date(d M Y,strtotime($count)); } вернуть $текущий; } но получил неожиданный объектный оператор (-›) - person andreaem; 20.06.2016
comment
Я до сих пор не понимаю вашего намерения, но в вашем коде есть опечатка. Должно быть: function get_day($count = null) { if (empty($count)) { for ($d = 0; $d < 6; $d++) { $current .= ((new DateTime())->modify("+$d days"))->format('d M Y'); } } else { $current = date("d M Y",strtotime($count)); } return $current; } - person Denis Giffeler; 20.06.2016
comment
вставка вашего кода возвращает ту же ошибку: синтаксическая ошибка, неожиданный '->' (T_OBJECT_OPERATOR) - person andreaem; 20.06.2016
comment
Используете версию PHP ‹ 5.4.0? - person Denis Giffeler; 20.06.2016
comment
Я использую 5.5.9-1ubuntu4.17 - person andreaem; 20.06.2016
comment
Вы не можете сделать new DateTime()->.... Это выдает ошибку синтаксического анализа. Сделайте это как отредактированный ответ! - person ; 20.06.2016

$date = '2016-06-20'; //replace this by your date
$statement = '';
for($i = 0; $i < 7; $i++){
    $statement.= ' || ' . date('d M y', strtotime("$date +$i day"));
}
echo $statement;

Теперь вы можете использовать свою дату вместо $date.

ДЕМО

person Mojtaba    schedule 20.06.2016
comment
Спасибо, а куда я должен поместить эту часть кода? что я должен поместить в оператор if? - person andreaem; 20.06.2016
comment
@andreaem, извини. У меня было неправильное понимание. Я только что обновил код - person Mojtaba; 20.06.2016
comment
Тем не менее получить 26 июня 2016 года. - person andreaem; 21.06.2016
comment
@andreaem. Вы можете изменить номер в цикле. Настройте его по своему усмотрению. Например, изменить 7 на 6. - person Mojtaba; 21.06.2016
comment
Я знаю, но я все еще получаю 26 июня для всех результатов. - person andreaem; 21.06.2016
comment
@andreaem, это невозможно. Ставлю ДЕМО. Вы делаете что-то не так. Поместите код, который вы используете - person Mojtaba; 21.06.2016
comment
function get_day($date) { if ($date == NULL) { $current = ''; for($i = 0; $i ‹ 7; $i++){ $current = . date('d M Y', strtotime($date +$i день)); } } else { $current = date(d M Y,strtotime($date)); } вернуть $текущий; } - person andreaem; 21.06.2016
comment
Возможно, есть ошибка, потому что мне нужно поместить эти даты в переменную, каждый день должен быть переменной, поэтому я вызываю это, используя $v1 = get_day(); $v2 = получить_день(); $v3 = get_day() и т. д. - person andreaem; 21.06.2016
comment
вот ссылка, чтобы увидеть, куда поместить данные imgur.com/OzwlNFz, первый элемент данных получил имя $v21, второй $v22, третий $v23 и т. д. - person andreaem; 21.06.2016
comment
@andreaem, тебе нужно свидание. Какова ваша логика, если нет даты? Я предполагаю, что вы должны сделать это: if ($date == NULL) { $date = date('Y-m-d'); .... . Поместите полный код здесь: sandbox.onlinephpfunctions.com - person Mojtaba; 21.06.2016