2012-09-10 72 views
-2

我存儲在MySQL表從2010年的日期 - 2040採用以下格式:如何判斷新月是否已經開始? PHP/MySQL的

2012-01-02

我選擇每個日期從表在一段時間顯示出來 - mysql_fetch_assoc循環

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

    echo $row["date"]; 

} 

如何檢查新的月份是否已經開始?我懷疑我需要使用爆炸()放置當月計數器在VAR ......可是怎麼也比較進行,因爲變種會在while循環

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

感謝

回答

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

您可以使用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

0

,如果你只需要一個月,那麼你不必爆炸在PHP的日期格式,你可以在MySQL查詢當月像

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

,並檢查其餘的東西..

0

您可以將您的查詢中做到這一點,使用存儲變量:

set @prevmonth := null; 

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

然後只需在取出碼檢查這個新的衍生new_month領域 - 這將是1 /真的,任何時候你已經REA避開新的一個月。

注意:由於第一行的比較結果是針對null @prevmonth,所以第一行的結果爲0/false。您可能希望第一行是真實的,但這超出了所有這些範圍。

相關問題