我最近接到的任务是编写一个报告工具来获取多个历史数据。 但我已经陷入了困境。我无法获取过去整月的数据。
故事: 用户获得一个字段,可以在其中输入他想要获取历史记录(过去几个月)的时间长度,例如:我想要过去 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 .
因此,我宁愿直接在 PHP 中计算所需的时间段,而不是使用笨拙、不可读的 SQL 函数:
$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/