如何按周,月或自定义季度循环一组日期和分组?

时间:2018-02-07 08:20:57

标签: php mysql date dateinterval

我将根据日期范围和日期顺序从数据库中提取行,例如

SELECT date, code FROM records WHERE personid = '133'AND date >= '2017-02-10' AND date <= '2017-06-13' AND code IN ('P','T') ORDER BY date ASC 

这些记录我喜欢以特定方式分组或订购。

一种方法是按连续日期对记录进行分组,为此,我有以下功能:

 function getRecordsWithIntervals(array $records, $interval_size)
            {
                $intervals = array();
                foreach (array_chunk($records, $interval_size) as $interval_records) {
                    $first_record = reset($interval_records);
                    $interval = array(
                        'start' => $first_record['date'],
                        'codes' => array_column($interval_records, 'code'),
                        'count' => count($interval_records),

                    );
                    $intervals[] = $interval;
                }
                return $intervals;
            }

连续5天我调用该函数,如

getRecordsWithIntervals($records, 5);

但现在我想添加每周,每月或每季度的功能。例如:

getRecordsWithIntervals($records, 'weekly');

在2017年2月2日 - 2017年6月13日的日期范围内,每个Mo-Sunday间隔订购/分组$记录???

这是一些样本数据 enter image description here

我想绘制这张Google图表 Google Chart

这将是2月和3月用PHP生成的JS

['Feb 6-12, 2017’,1,’1’],
['Feb 13-19, 2017’,4,’4’],
['Feb 20-26, 2017’,4,’4’],
['Feb 27-??, 2017’,5,’5’],
['Mar 6-12, 2017',5,'5'],
['Mar 13-19, 2017',5,'5'],
['Mar 20-26, 2017’,3,’3’],
['Mar 27-xx, 2017’,4,’4’],

1 个答案:

答案 0 :(得分:1)

MySQL可能是概念上与您的数据形成组的更好地方。例如,如果您想要点击周数和月份,您可以将这些项添加到您的select子句中:

SELECT
    date,
    WEEK(date) AS week,
    MONTH(date) AS month,
    code
FROM records
WHERE
    personid = '133' AND
    date BETWEEN '2017-02-10' AND '2017-06-13' AND
    code IN ('P','T')
ORDER BY date;