有這麼一個需求,指定日期是12月12日,在12月12號前我要執行A事件,在其後要執行B事件,怎樣判斷今天是在12月12日的前還是後?
程序如下:
<?php $year = 2010; $month = 12; // 月 $day = 12; // 日 $timeoffset = 8; // 與格林尼治時間 GMT 的時差 list($thisyear, $thismonth, $thisday) = explode('-', date('Y-n-j', time() + $timeoffset * 3600)); if(($thismonth > $month) || ($thismonth == $month && $thisday > $day) || $thisyear > $year) { echo '已經過了'; } elseif ($thismonth == $month && $thisday == $day && $thisyear == $year) { echo '就是今天了'; } else { echo '還沒到'; } ?>
下面是帶注釋的代碼:
//你還需要知道的另一個變量是年份,不過依你的意思應該是當年。 $timestamp = time(); $dateYear = date('Y', $timestamp);//當前年,依當前需要可以不需要比較,但有時也許會用到,比如你的記錄不是當年要處理的 $dateMonth = date('n', $timestamp);//當前月份數字,沒有前導零 $dateDay = date('j', $timestamp);//月份中的第幾天,沒有前導零 //剩下的就是比較了,比如你要比較的日期是 2007-03-01 $eventDate = '2007-03-01'; $eventDateArr = explode('-', $eventDate); $eventYear = intval($eventDateArr[0]); $eventMonth = intval($eventDateArr[1]); $eventDay = intval($eventDateArr[2]); //上面是年月日的拆分,根據實際情況可以調整,如果你直接可以得到就不需要這樣取了。 //之後剩下的就是比較了,先比較年 if($dateYear == $eventYear) { //同年 if($dateMonth == $eventMonth) { //同月 if($dateDay == $eventDay) { //同一天,就是當前日期就是事件觸發的日期 } elseif($dateDay > $eventDay) { //事件已經過期了 } else { //事件觸發日期還沒到 } } else { //之前或之後,再需要詳細判斷可以在這裡比較哪個月份大 } } else { //之前或之後,再需要詳細判斷可以在這裡比較哪個年份大 } //其實這種比較是最簡單的邏輯判斷,如果你在記錄時間觸發日期時記錄的是 unix 時間戳,這裡可以直接進行時間戳比較不過需要處理一下,因為時間戳是精確到秒的 //或者把你記錄的日期及其後一天直接轉化成 unix 時間戳,時分秒都用 0 ,和當前時間戳比較,細節判斷就自己去分析吧,可用函數去查查手冊裡面 strtotime() ,時間相關函數參數很多,不過用過幾次就熟悉了。