繁体   English   中英

strtotime 2月错误

[英]strtotime february bug

好的,所以我的理解是,如果我在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' ) ) .
         "&nbsp" . money_format( '%i', $sales );
  echo "</p>";

  $i++;
}

如何避免2月的错误? ifif语句? 那会是什么样?

这是一个纯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中,您只需要一个显示循环。

我如何索取2月的所有记录...

SELECT * FROM table WHERE MONTH(billing_date)= 2

2月错误? 这不是错误。 标准化日期是一项(有用的)功能! :-)

如果要在2月的最后一天,请要求3月0日。

我不知道“ 2月的错误”,但是您可以尝试使用MySQL减去1个月。 校验

SELECT DATE_SUB(billing_date, INTERVAL 1 MONTH) FROM my_table

=> 手动

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM