作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近接到任务,要写一个报表工具,获取历史数据。但我到了一个我被困住的地步。我无法获取过去整月的数据。
故事:用户会得到一个字段,他可以在其中键入他想要获取(过去几个月的)历史记录的时间,例如:我想要最近 3 个月的数据。他键入他的值,发送数据并(应该)得到这样的输出(因为我们现在是九月):
X data in August,
Y data in July,
Z data in June.
我的查询是:
SELECT * FROM table WHERE (publish_up between date_sub(NOW(),
INTERVAL ".$history." MONTH)
AND date_sub(now(), INTERVAL " . -- $history . " MONTH))
AND created_by = '$editorID' AND state = 1 AND sectionid in (1,2,3)";
但是有了这个,显然我总是从现在开始获取数据 - 1 个月。因此,我将向用户显示的数据是错误的,因为它从某个月中的某个地方开始,并在另一个月中的某个地方结束。我希望时间段从每月的第一天开始,到每月的最后一天结束。
我的第一个想法是,我可以从当前日期减去当月已经过去的天数以获得上个月的第一天,但我不知道该怎么做。我也不知道如何得到那个月的名字。
最佳答案
您可以使用 PHP 函数根据当前日期计算任意日期 mktime和 strtotime .
因此,与其使用笨拙、难以理解的 SQL 函数,不如直接在 PHP 中计算所需的时间段:
$period_end = mktime(0,0,0, date('n'), 1, date('Y')); // first of current month, time 00:00:00
$period_begin = strtotime('-3 months', $period_end);
然后您可以将这些嵌入到您的 SQL 查询中,如下所示:
$query = "SELECT * FROM table WHERE publish_up BETWEEN '" .
date('Y-m-d H:i:s', $period_begin) ."' AND '" .
date('Y-m-d H:i:s', $period_end) ."' AND "
"created_by = '$editorID' AND state = 1 AND sectionid in (1,2,3)";
关于php - 从基于当前日期的整月期间选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743045/
我是一名优秀的程序员,十分优秀!