如何判断新的一个月是否已经开始?php/mysql


How does one tell if a new month has started? php/mysql

我将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..
}

感谢

$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';
  }
}

您可以使用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,如果你不知道哪一个更合适,请阅读本文。

如果你只需要一个月,那么你不必在php中分解日期格式,你可以在类似的mysql查询中获得这个月

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

并检查其余的东西。。

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

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

然后只需在提取代码中检查这个新派生的new_month字段——只要你进入新的月份,它就会是1/true。

注意:因为第一行的比较将针对null@previmonth,所以第一行显示为0/false。您可能希望第一行为true,但这超出了所有这些的范围。