好的,所以我明白如果我在第29天或更高的那天运行strtotime功能,我将会产生2月份的错误并获得3月的结果。
我也知道,如果我将日期设定为2月1日,我可以避免这个问题。
但这是问题所在。我正在浏览过去12个月的记录,以生成用于跟踪的销售/帐单号码。当我的循环看起来像这样时,我如何在二月份要求所有记录?
setlocale( LC_MONETARY, 'en_US' );
$i = 0;
while( $i <= 11 ) {
$select = "SELECT * FROM `my_table` " .
"WHERE YEAR( billing_date ) = '" . date( 'Y', strtotime( -$i . ' month' )) . "' " .
" AND MONTH( billing_date ) = '" . date( 'm', strtotime( -$i . ' month' )) . "'";
$result = mysql_query( $select );
$num_rows = mysql_num_rows( $result );
$sales = 16 * $num_rows;
echo "<p align='center'>";
echo "Sales for " . date( 'M, Y', strtotime( '-' . $i . ' month' ) ) .
" " . money_format( '%i', $sales );
echo "</p>";
$i++;
}
如何避免二月虫?它会是if
声明吗?那会是什么样的?
答案 0 :(得分:3)
这是一个纯SQL解决方案(如果我正确理解了这个场景):
SELECT
YEAR(billing_date) AS billing_year,
MONTH(billing_date) AS billing_month,
16 * COUNT(*) AS sales /* Why x16?!!! */
FROM my_table
GROUP BY YEAR(billing_date), MONTH(billing_date)
这将直接在SQL中计算销售额,因此在PHP中您只需要一个显示循环。
答案 1 :(得分:1)
我如何在二月份要求所有记录......
SELECT * FROM table
WHERE MONTH(billing_date)= 2
答案 2 :(得分:0)
如果您想要二月的最后一天,请询问三月零日。
答案 3 :(得分:0)
我不知道“二月虫”,但您可以尝试使用MySQL减去1个月。检查
SELECT DATE_SUB(billing_date, INTERVAL 1 MONTH) FROM my_table
=&GT; Manual