我将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,但这超出了所有这些的范围。