如何在php中按周显示网格中的天数?

Posted

技术标签:

【中文标题】如何在php中按周显示网格中的天数?【英文标题】:How to display days in a grid by weeks in php? 【发布时间】:2019-06-22 02:18:17 【问题描述】:

我正在尝试以网格或表格形式显示一个月中的天数。我正在考虑使用 Bulma 或 bootstrap 来处理网格/表格。网格基于 5 行和 7 列。我不知道如何去实施一周中正确的日子。每周应按 div 分组,其中包含日期。这是我目前所拥有的:

  <?php

  $row = '';
  $startDate = 12/30/2018;
  $numDays = 35;
  $datesArr = array();
  $weekCounter = 1;

  for ($i = 0; $i <= numDays; i++) 
     $row .= '<div>';
     $date = date('m/j/Y', strtotime("$startDate +$i days"));
     $datesArr[] = $date;

     if ($i % 8 == 0) 
        $row .= '<p>Week ' . $weekCounter++ . '</p>';
      else 
        $row .= '<p>'.$date . ' - ' . date('l'), strtotime($date)). '</p>';
     

     $row .= '</div>';
  
  echo $row;
 ?>

这是我当前的输出:

第 1 周

2018 年 12 月 31 日-星期一

01/1/2019-星期二

2019 年 1 月 2 日-星期三

2019 年 1 月 3 日-星期四

2019 年 1 月 4 日-星期五

01/5/2019-星期六

2019 年 1 月 6 日-星期日

第 2 周

01/8/2019-星期二

2019 年 1 月 9 日-星期三

2019 年 1 月 10 日-星期四

2019 年 1 月 11 日-星期五

2019 年 1 月 12 日-星期六

2019 年 1 月 13 日-星期日

2019 年 1 月 14 日-星期一

第 3 周

2019 年 1 月 16 日-星期三

2019 年 1 月 17 日-星期四

2019 年 1 月 18 日-星期五

01/19/2019-星期六

2019 年 1 月 20 日-星期日

2019 年 1 月 21 日-星期一

01/22/2019-星期二

第 4 周

01/24/2019-星期四

2019 年 1 月 25 日-星期五

01/26/2019-星期六

2019 年 1 月 27 日-星期日

2019 年 1 月 28 日-星期一

01/29/2019-星期二

2019 年 1 月 30 日-星期三

第 5 周

2019 年 2 月 1 日-星期五

2019 年 2 月 2 日-星期六

2019 年 2 月 3 日-星期日

【问题讨论】:

欢迎来到 Stack Overflow。其中大部分将由 CSS 而不是 PHP 处理。我会建议一个表来构建视图。可能想看看 jQuery UI DatePicker,看看它是如何显示的。 【参考方案1】:
<?php

$row = '';
$startDate = '12/30/2018';
$numDays = 35;
$datesArr = array();
$weekCounter = 1;

for ($i = 0; $i <= $numDays; $i++) 

    $date = date('m/j/Y', strtotime("$startDate +$i days"));
    $datesArr[] = $date;

    // New div at start of week
    if (date("l", strtotime($date)) == "Sunday") 
        $row .= "<div style=\"float: left; margin: 10px;\">";
        $row .= '<p>Week ' . $weekCounter++ . '</p>';
    

    $row .= '<p>'. $date . ' - ' . date("l", strtotime($date)) . '</p>';

    // close div at end of week
    if (date("l", strtotime($date)) == "Saturday") 
        $row .= "</div>"; 
    



echo $row;

?>

【讨论】:

我认为我的实施不正确,我错过了第一周后一周的第一个星期一。 我刚刚将其添加到我的答案中 另外,我现在看到它只是一个包裹整个事物的大 div,而不是把它分成几个星期。寻找一种将每周包装在自己的 div 中的好方法。 谢谢。你会建议一种不同的方式来实现这一点,还是你认为我的第一种方法是有效的?由于我的个人时间限制,我几乎试图尽快解决它。 这应该是相当简单的,特别是如果你添加更多的条件,比如if (date("l", strtotime($date)) == "Monday"),然后在顶部添加一个 div,如果日期是星期日,则添加一个结束 div 标签。【参考方案2】:

您也可以考虑使用 jQuery UI Datepicker。您可以使用 AJAX 获取开始日期和天数。然后绘制日历。

$(function() 
  function getDateInfo() 
    $.getJSON("dateInfo.php", function(data)
      drawCal(data.startDate, data.numDays, $(".calendar"));
    )
  

  function drawCal(sd, nd, tObj) 
    var format = "mm/dd/yy";
    var min = $.datepicker.parseDate(format, sd);
    var max = new Date();
    max.setDate(min.getDay() + nd);
    console.log(sd, max);
    tObj.html("");
    tObj.datepicker(
      dateFormat: format,
      minDate: min,
      maxDate: max,
      numberOfMonths: [3, 1]
    );
  

  drawCal("12/31/2018", 35, $(".calendar"));
);
.ui-datepicker-group 
  width: 100%;
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<div class="calendar"></div>

【讨论】:

以上是关于如何在php中按周显示网格中的天数?的主要内容,如果未能解决你的问题,请参考以下文章

完整日历周显示垂直视图

在 DateTimePicker 控件中更改周显示

c#中如何根据一个日期得到这一周的日期

如何在 SQL 查询中按不同天数分组?

按周显示的滚动尾随 30 天窗口中的唯一客户总数

如何在 C++ 中按递增顺序绘制球体网格?