用价格呈现日期表

时间:2010-03-06 01:40:06

标签: php calendar date

假设您以12/28/10的到达日期和1/5/11的出发日期,以数组的形式(始终如一并且可以依赖),例如:

$data = array(
0 => array(
'Date' => '12/28/10',
'Price' => 100
),
1 => array(
'Date' => '12/29/10',
'Price' => 100
),
2 => array(
'Date' => '12/30/10',
'Price' => 100
),
3 => array(
'Date' => '12/31/10',
'Price' => 100
),
4 => array(
'Date' => '1/1/11',
'Price' => 100
),
5 => array(
'Date' => '1/2/11',
'Price' => 100
),
6 => array(
'Date' => '1/3/11',
'Price' => 100
),
7 => array(
'Date' => '1/4/11',
'Price' => 100
)
);

我怎样才能生成一个总结两周费率的表格,第一个表格单元格从星期日开始,最后一个表格单元格在星期六开始?

输出必须是:

<table>
<tr>
        <thead>
                                                            <tr>
                                                            <th>Sun</th>
                                                            <th>Mon</th>
                                                            <th>Tue</th>

                                                            <th>Wed</th>
                                                            <th>Thu</th>
                                                            <th>Fri</th>
                                                            <th>Sat</th>
                                                            </tr>
                                                        </thead>
<tbody>
<tr>
<td>12/26</td>
<td>12/27</td>
<td>12/28</td>
<td>12/29</td>
<td>12/30</td>
<td>12/31</td>
<td>1/1</td>
</tr>
<tr>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td>$100</td>
</tr>
<tr>
<td>1/2</td>
<td>1/3</td>
<td>1/4</td>
<td>1/5</td>
<td>1/6</td>
<td>1/7</td>
<td>1/8</td>
</tr>
<tr>
<td>$100</td>
<td>$100</td>
<td>$100</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

到目前为止,我所做的是:

$firstDay = strtotime( $data[0]['Date'] );
$firstSunday = strtotime('last sunday', $firstDay);
$lastDay = strtotime( $data[count($data)-1]);
$lastSaturday = strtotime('saturday', $lastDay);

$nights = (( $lastSaturday - $firstSunday ) / 86400) + 1;
$numWeeks = $nights / 7;

for ( $i=0; $i< $numWeeks; $i++) {
}

然而,我不确定我所做的是否是正确的,这是在几周内循环...因为我似乎无法在该循环中获得对我想要的那一天的引用。

以前,我不需要生成mm / dd行,因此我可以依赖循环遍历所有日期,但由于我现在每周需要两行,所以它变得更加复杂。

1 个答案:

答案 0 :(得分:2)

试试这个,它有效......

        <?php
        $firstDay = strtotime( $data[0]['Date'] );
        $firstSunday = strtotime('last sunday', $firstDay);
        $diff = (( $firstDay - $firstSunday ) / 86400);
        $diff2 = 7 - (($diff+count($data))%7);


          for($i=0;$i<$diff;$i++){   
            //Adding missing elements in front of the array
            array_unshift($data, array('Date'=> date("m/d/Y",strtotime('-1 day',strtotime($data[0]['Date']))), 'Price'=>'0'));    
          }
          for($i=0;$i<$diff2;$i++){    
            //Adding missing elements in end of the array
            array_push($data, array('Date'=> date("m/d/Y",strtotime('+1 day',strtotime($data[count($data)-1]['Date']))), 'Price'=>'0'));    
          }

        //table header
        //cicle until the length of $data (num of days) array will reach
        //$i increment by 7 every cicle to simulate the week 
        //by this you don't need successive counts to retrive corret Date and price from array 
        for($i=0;$i<count($data);$i=$i+7){
            //Every week the $days and price are reset to null
            $days="";
            $price="";
            //cicle the 7 days in a week
            for($j=0;$j<7;$j++){
                //add the columns Date ($i+$j) is used to retrive the correct array pos 
                //$j is the day in the "current" week
                //$i is the "past week" days 
                $days.="<td>".$data[$i+$j]['Date']."</td>";
                $price.="<td>".$data[$i+$j]['Price']."</td>";
              }
              //week finished add 2 rows and the respective cols
           echo "<tr>".$days."</tr><tr>".$price."</tr>";
        }
        //table Footer
?>