2016-08-02 3 views
0

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

В текущем состоянии отображаются только ярлыки на дни, которые я получил (например, 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'); 
[...] 

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

ответ

1

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

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

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

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

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

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

имеет мало смысла использовать $date в strtotime, как это всегда нуль там. Не говоря уже о значении этого расчета. В этом случае $date может быть null в вашей базе данных? (Предполагается, что $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; 
} 

и возвратят некоторую дату в будущем, когда $ даты пуста, «Oggi», если она соответствует текущей дате и самой дату в противном случае.

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

+0

Извините за мое неправильное объяснение, я не очень хорошо по-английски. Я конвертирую дату, потому что даты в базе данных в формате Y-M-d извините, если я не буду говорить об этом. Вместо этого я в настоящее время использую ваш код (похожий на его вчерашнюю версию), но я получил только первый день в правильном значении, следующие дни начинаются с 4 дней назад, например: 03-08-2016, 07-08 -2016, 08-08-2016, 09-08 .. Это потому, что мне нужно сначала рассчитать текущий день недели. http://i64.tinypic.com/21ex1g4.png – andreaem

+0

Используя ваш код, я добавил в верхнюю часть этих двух строк $ dayofweek = 'date (" w ", strtotime ($ date)); \t if ($ daynum == $ dayofweek) {$ daynum = 1; } else if ($ daynum == $ dayofweek + 1) {$ daynum = 2; } else if ($ daynum == $ dayofweek + 2) {$ daynum = 3; } else if ($ daynum == $ dayofweek + 3) {$ daynum = 4; } else if ($ daynum == $ dayofweek + 4) {\t $ daynum = 5; } else if ($ daynum == $ dayofweek + 5) {$ daynum = 6; } else if ($ daynum == $ dayofweek + 6) {\t $ daynum = 7; } '. Используя это, я получил следующие дни, как я ожидаю – andreaem

0
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')); 
    ?> 
Смежные вопросы