2013年12月6日 星期五

【筆記】在PHP中做日期時間的處理

在PHP中要處理日期,第一個想到的就是使用DateTime這個類別,它的建構子接受兩個參數,第一是表示時間的字串,如:「NOW」、「2013-01-01」等,第二個是表示時區的DateTimeZone類別,這兩個參數都是可以忽略的。

比如,你要取得現在時間,就可以直接這樣寫:
$today = new DateTime();
echo $today->format('Y-m-d H:i:s'); 
//執行結果為:2013-12-05 16:34:47
上列的執行的結果可以會和電腦顯示的時間不一樣,這是因為PHP時區設定的關係,可以去更改PHP的設定,或是在DateTime建構方法傳入DateTimeZone參數,並設定我們需要的時間字串:
//設定時間區為台北
$today = new DateTime('NOW', new DateTimeZone('Asia/Taipei'));
echo $today->format('Y-m-d H:i:s');
//執行結果為:2013-12-06 00:34:47

若是你要取得某一個自訂日期時間,就可以直接這樣寫:
$someDay = new DateTime('2010-08-08');
echo $someDay->format('Y-m-d');
//執行結果為:2010-08-08
上列的DateTime所擁有的format,是用來做日期格式化的方法,其格式字串,「Y」表示是要格式化成4位數的西元年,「m」為「01到12」的月份,「d」為「01到31」的那一天,「H」表顯示為24小時制的時,而「i」表顯示為「00到59」的分鐘部份,「s」表「00到59」的格式來顯示秒數,詳細的格式化字串格式可以參考date方法的說明。

再來,要做日期的加減,要使用到DateTime類別的add方法,再搭配DateInterval類別來實現,比如想取得三個月後的日期:
$today = new DateTime('NOW', new DateTimeZone('Asia/Taipei'));
$today->add(new DateInterval('P3M'));
echo $today->format('Y-m-d');
//執行結果為:2014-03-06
若要取得三個月前的日期,就使用DateTime類別的sub方法
$today = new DateTime('NOW', new DateTimeZone('Asia/Taipei'));
$today->sub(new DateInterval('P3M'));
echo $today->format('Y-m-d');
//執行結果:2013-09-06
在上列的DateInterval類別建構子字串參數,若要加減1年就傳「P1Y」,要加減1個月就傳「P1M」,要加減1天就傳「P1D」,要加減1年2個月又3天就傳「P1Y2M3D」,依此類推。