我将日期存储在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..
}
感谢
答案 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。您可能希望第一行为真,但这超出了所有这些范围。