渲染日期和价格表

发布于 2024-08-23 15:17:25 字数 2866 浏览 4 评论 0原文

假设您以数组的形式给出了到达日期 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 行,因此我可以依靠循环遍历所有日子,但它变得更加复杂,因为我现在每周需要两行。

Let's say you were given the arrival date 12/28/10 and a departure date of 1/5/11, in the form of an array ( which is always consistent and can be relied upon ) such as:

$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
)
);

How could I generate a table summarising the two weeks of rates up, with the first table cell starting on Sunday and the last table cell on Saturday?

The output would need to be something like:

<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>

What I have so far done, is:

$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++) {
}

However I'm not sure if what I'm doing is right, that is looping through the weeks.. because I can't seem to get a reference to the day I want inside of that loop.

Previously, I did not need to generate the mm/dd row so I could rely on looping through all the days, but it's gotten more complex since I need two rows per week now.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤寂小茶 2024-08-30 15:17:25

试试这个,它有效...

        <?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
?>

try this, it works...

        <?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
?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文