在这里,我有两个日期,如下所示
2012-08-12 to 2012-10-20
我需要如下输出:
month[08]=19
month[09]=30
month[10]=20
你可以通过 PHP,MYSQL 解决它
用于PERIOD_DIFF(P1,P2)
获取两个日期之间的月数。
返回周期 P1 和 P2 之间的月数。P1 和 P2 的格式应为 YYMM 或 YYYYMM。请注意,句点参数 P1 和 P2 不是日期值。
mysql> SELECT PERIOD_DIFF(200802,200703); -> 11
在您的情况下,您将使用:
SELECT PERIOD_DIFF(DATE_FORMAT('2012-10-20', '%Y%m'), DATE_FORMAT('2012-08-12', '%Y%m'))
根据这篇文章,使用EXTRACT
可能会更快:
SELECT PERIOD_DIFF( EXTRACT(YEAR_MONTH FROM '2012-10-20'), EXTRACT(YEAR_MONTH FROM '2012-08-12')) AS months FROM your_table;
如果您想在 MySQL 中构建一个包含您感兴趣的日期范围内所有可能的日期值的表,您可以通过查询相对容易地做到这一点。
该表只需要有一个像
dates
----------
2012-01-01
2012-01-02
...
2050-12-31
然后你可以像这样查询表:
SELECT YEAR(`dates`) as `years`, MONTH(`dates`) as `months`, COUNT(`dates`) as `days`
FROM date_table
WHERE `dates` BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
GROUP BY `years`, `months`
ORDER BY `years` ASC, `months` ASC
这种拥有日期表的方法通常用于 BI/数据仓库应用程序中,但我认为它可以在这里为您工作。
请注意,我还在那里添加了一个“年”值,因为我想这也是您需要处理的事情,除非您从未计划过可以跨越多年的日期范围。