如何判断新月是否开始? PHP / MySQL的

时间:2012-09-10 04:50:43

标签: php mysql date

我将日期存储在2010 - 2040年的mySQL表中,格式如下:

2012-01-02

我从表中选择每个日期并在一段时间内显示它们 - mysql_fetch_assoc循环

while($row=mysql_fetch_array($result)){

    echo $row["date"];

}

如何查看新月已开始?我怀疑我需要使用explode()将当前月份计数器放入var ...但是如何进行比较,因为var将在while循环中被覆盖

if(old month != new month){
    do something..
}

感谢

4 个答案:

答案 0 :(得分:4)

$old_month = '';

while($row=mysql_fetch_array($result)){
  list($year, $month, $day) = explode('-', $row["date"]);
  if($old_month != $month) {
    $old_month = $month;
    echo 'new month';
  }
}

答案 1 :(得分:1)

您可以使用date_parse将几乎任何日期格式解析为其组件。例如:

$date = date_parse("2012-01-02");
var_dump($date);

将输出:

array(12) {
  ["year"]=>
  int(2012)
  ["month"]=>
  int(1)
  ["day"]=>
  int(2)
  ["hour"]=>
  bool(false)
  ["minute"]=>
  bool(false)
  ["second"]=>
  bool(false)
  ["fraction"]=>
  bool(false)
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
  ["is_localtime"]=>
  bool(false)
}

...您的代码将是这样的:

$month = false;
while( $row = mysql_fetch_array($result) ) {
    $date = date_parse( $row["date"] );

    if( $month != $date["month"] ) {
        $month = $date["month"];
        echo "month: {$month}<br />";        
    }

}

您应该停止使用mysql_*函数,它们已被弃用。试试mysqli_*PDO,如果您不知道哪一个更合适,read this

答案 2 :(得分:0)

如果您只需要一个月,那么您不必在php中爆炸日期格式,您可以在mysql查询中获取月份

$query = "select month(date) as mont from table_name";

并检查其余的东西..

答案 3 :(得分:0)

您可以使用存储变量在查询中执行此操作:

set @prevmonth := null;

select if(month(datefield) <> month(@prevmonth), true, false) AS new_month, @prevmonth := month(datefield), ....
FROM ...

然后只需在您的获取代码中检查这个新的派生new_month字段 - 只要您达到新月,它就会为1 / true。

注意:因为第一行的比较将对null @prevmonth起作用,所以第一行的结果为0 / false。您可能希望第一行为真,但这超出了所有这些范围。