2012-08-27 176 views
1

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

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

回答

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" 
} 
*/ 
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) 
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) 

如果是周一,它使用当前的信息周。您可以修改它以适应您的需求。

+0

注意:结果集中没有任何数据库中没有数据的日期记录 - 人们可能仍然希望在报告中显示这样的日期,在这种情况下PHP中的循环(比较每个报告日期与日期排序的结果集中下一条记录的日期)可能是最佳选择。 – eggyal

+0

@eggyal是的,我同意,但是当我回答时,所有的答案都指向了纯粹的PHP解决方案。我想我会添加其他选项。 – Fluffeh

相关问题