PHP:根据当前工作日获取一周中的下一天,然后显示在图表标签

时间:2016-08-02 20:02:22

标签: php date date-formatting

我有一个图表,显示每周访问该网站,值的格式为“d M Y”,数据将从数据库中返回。

在当前状态下,仅显示我获取数据的日期标签(例如,2016年8月1日和今天)。

我还会返回每个标签的下一天(一周中的每一天),但请记住一周中的当天(例如,如果星期三必须返回2016年8月3日,如果星期四返回8月) 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');
[...]

感谢所有可以提供帮助的人。

2 个答案:

答案 0 :(得分: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' ?

最后,在switch-case中也没有多大意义,因为你没有理由重复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 config中的默认时区等等。只有当你理解了你想要实现的目标时,这一切才有意义。

答案 1 :(得分: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'));
    ?>