【发布时间】:2012-04-30 20:48:57
【问题描述】:
好的,所以我明白,如果我在 29 日或更高的一天运行 strtotime 函数,我将引发二月错误并获得三月的结果。
我还知道,如果我将日期设置为 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 声明吗?那会是什么样子?
【问题讨论】:
-
听起来不像是一个错误。 2 月实际上只有 28 天。或者至少在 1970 年是这样。
-
我不明白您要使用该查询获取什么。
MONTH(billing_date)会返回一个从 1 到 12 的数字,那你为什么不直接和$i+1比较呢?