通过指定日期间隔中的当前日期和缺席日期来显示全勤

时间:2019-07-11 08:30:10

标签: php html arrays

我有每位员工的出勤日志,该员工可能只有几天的时间。我想显示给定日期间隔中的当前天和缺席天。

例如给定的时间间隔是:

let items = [{title:'Roundtrip: Senior Product Designer'},{title:'Frontend Developer'},{title:'Unreal is looking for a Product Designer'}] console.log(items.map(item => { const colonSeperated = item.title.split(':') const phraseSeperated = item.title.split('is looking for ') if(colonSeperated.length == 2){ return ({ company:colonSeperated[0], title: colonSeperated[1].trim(' ') }) } else if(phraseSeperated.length ==2){ const phraseSeperatedTitle = phraseSeperated[1].startsWith('an')? phraseSeperated[1].substr(2):phraseSeperated[1].substr(1) return({ company:phraseSeperated[0].trim(' '), title: phraseSeperatedTitle.trim(' ') }) } else { return ({ company:null, title:item.title }) } } ))

$from = "2019-03-01";

这是数据记录:

$to = "2019-03-05";

我希望输出如下:

我将以html显示输出。

[
 {      
   "id": 1310,
   "empid": 3,
   "check_in": "11:56",
   "check_out": "17:25",
   "date": "2019-03-02",
   "time_long": "5:28"
 }, 
 {      
   "id": 1311,
   "empid": 3,
   "check_in": "08:00",
   "check_out": "16:00",
   "date": "2019-03-04",
   "time_long": "8:00"
 },
...
]

1 个答案:

答案 0 :(得分:1)

让我们假设$ input具有您指定格式的数据。

这是Json格式,因此首先需要对其进行解码。

接下来,您需要重新格式化数组,以便键是日期。

接下来,您需要将Dates更改为DateTime对象。

现在,您可以使用for循环遍历这些日期。在for循环内,您需要检查给定日期的格式数组中是否存在键。如果是,则使用它进行填充。否则,打印X。

下面是整个代码

$results = json_decode($input);

$formatResults = array();
foreach( $results as $result) {
    $date = $result->date;
    $formatResults[$date] = $result;
}

$from = "2019-03-01";
$to = "2019-03-05";

$begin = new DateTime( $from );
$end   = new DateTime( $to );
?>
<table>
    <thead>
        <tr>
            <th>NO</th>
            <th>Date</th>
            <th>Check In</th>
            <th>Check Out</th>
            <th>Time Long</th>
        </tr> 
    </thead>
    <tbody>
<?php    
    $loopCount = 0;
    for($i = $begin; $i <= $end; $i->modify('+1 day')){
        $loopCount++;
        echo '<tr>';
            echo '<td>'. $loopCount . '</td>';
            echo '<td>'. $i->format("Y-m-d") . '</td>';
            if( isset ( $formatResults[ $i->format("Y-m-d") ] ) ) {
                echo '<td>'. $formatResults[ $i->format("Y-m-d") ]->check_in . '</td>';
                echo '<td>'. $formatResults[ $i->format("Y-m-d") ]->check_out . '</td>';
                echo '<td>'. $formatResults[ $i->format("Y-m-d") ]->time_long . '</td>';
            } else {
                echo '<td>X</td>';
                echo '<td>X</td>';
                echo '<td>X</td>';
            }
        echo '</tr>';
    }
?>
    </tbody>
</table>