1

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

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

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

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

4

3 回答 3

0

内加+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"
}
*/
于 2012-08-27T10:02:56.597 回答
0

要遍历报告中的所有日期,您可以执行以下操作:

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)
于 2012-08-27T10:06:44.760 回答
0

为什么不直接使用 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)

If it is Monday, it uses the current week of information. You can modify it a touch to suit your needs though.

于 2012-08-27T10:13:33.087 回答