【问题标题】:Array of last week dates (starting for latest monday)上周日期数组(从最近的星期一开始)
【发布时间】:2012-08-27 10:01:01
【问题描述】:

我必须生成一个报告,其中包含从星期一开始的上周数据(如果今天是星期一,则只显示今天的日期和计数)。 我可以知道如何获取上周日期数组(从上周一开始)吗? 谢谢。

我写了这个,但是在这种情况下,如果上周开始日期是 31,那么第二天就会变成 32,这是不可能的。

$last_week_date_start = date('Y-m-d', strtotime('last monday')) + 1;

我想要一个日期数组。 谢谢。

【问题讨论】:

    标签: php mysql arrays date


    【解决方案1】:

    在+1内添加

    for($i=0; $i<6; $i++){
        $last_week_dates[] = date('Y-m-d', strtotime('last monday + '.$i.' day'));
    }
    
    /*
    array(7) {
      [0]=>
      string(10) "2012-08-20"
      [1]=>
      string(10) "2012-08-21"
      [2]=>
      string(10) "2012-08-22"
      [3]=>
      string(10) "2012-08-23"
      [4]=>
      string(10) "2012-08-24"
      [5]=>
      string(10) "2012-08-25"
      [6]=>
      string(10) "2012-08-26"
    }
    */
    

    【讨论】:

      【解决方案2】:

      要遍历报告中的所有日期,您可以这样做:

      for ($date = strtotime('last monday'); $date < time(); $date += 24*60*60) {
        // e.g. date('Y-m-d', $date);
      }
      

      但是,要从数据库中获取数据,您可以这样做:

      SELECT   DATE(date), COUNT(*)
      FROM     my_table
      WHERE    DATE(date) BETWEEN CURRENT_DATE - INTERVAL WEEKDAY(CURRENT_DATE) DAY
                              AND CURRENT_DATE
      GROUP BY DATE(date)
      ORDER BY DATE(date)
      

      【讨论】:

        【解决方案3】:

        为什么不直接使用 SQL 为您完成所有工作?如果您从 mysql 中提取数据(正如您的问题标签可能建议的那样),您可以很好地使用以下内容:

        select date_sub(date_format(now(),'%Y-%m-%d'), interval WEEKDAY(now()) day) as date from dual;
        

        这会给你上周一的日期:

        mysql> select date_sub(date_format(now(),'%Y-%m-%d'), interval WEEKDAY(now()) day) as date from dual;
        +------------+
        | date       |
        +------------+
        | 2012-08-27 |
        +------------+
        1 row in set (0.00 sec)
        

        如果是星期一,则使用当前周的信息。不过,您可以稍微修改一下以满足您的需求。

        【讨论】:

        • 注意:对于数据库中没有数据的日期,结果集中不会有任何记录——人们可能仍希望在报告中显示这些日期,在这种情况下会出现循环在 PHP 中(将每个报告日期与按日期排序的结果集中下一条记录的日期进行比较)可能是最佳选择。
        • @eggyal 是的,我同意,但是当我回答时,所有答案都指向纯 PHP 解决方案。我想我会添加其他选项。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 2020-03-24
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多