2011-04-09 92 views
5

理論問題。php getdate()vs date()

想象一下情況。我需要得到今天的日期和時間(不是現在,但今天 - 一天的開始)。我可與這個代碼做到這一點:

$now = time(); 
$today = date('Y-m-d H:i:s', mktime(0, 0, 0, date("m", $now), date("d", $now), date("Y", $now))); 

或本:

$now = getdate(); 
$today = date('Y-m-d H:i:s', mktime(0, 0, 0, $now['mon'], $now['mday'], $now['year'])); 

在我見過的大多數例子中,使用第一種方式。問題很簡單:爲什麼?第一個使用3個函數調用來獲取月,日和年。

+0

大概習慣:從PHP互動提示的演示?或者只是運氣 - 找到類似的代碼示例。性能方面,兩者之間可能沒有真正的區別。對於它的價值,我更喜歡第二種方法。它讀得更好。 – Adam 2011-04-09 05:41:36

回答

13

兩個那些選項是很可怕的 - 如果你想在午夜獲取當前日期爲格式的字符串,它是那麼簡單:如果你想稍微

date('Y-m-d') . ' 00:00:00'; 

或者,更明確,

date('Y-m-d H:i:s', strtotime('today midnight')); 

沒有必要那麼古怪mktime的事情。編寫該代碼的人不知道他們在做什麼和/或是複製粘貼/貨物開發者。如果你真的在「大多數例子」中看到了這一點,那麼你正在與之閒逛的人羣是深深困擾着,你應該停止與他們一起出去玩。

唯一有趣mktime所做的事情是試圖與當地時區一起工作。如果您的工作是時區敏感的,並且您正在使用PHP 5.3或更高版本,請考慮使用DateTimeDateTimeZone

php > $utc = new DateTimeZone('UTC'); 
php > $pdt = new DateTimeZone('America/Los_Angeles'); 
php > $midnight_utc = new DateTime('today midnight', $utc); 
php > $midnight_utc->setTimeZone($pdt); 
php > echo $midnight_utc->format('Y-m-d H:i:s'); 
2011-04-08 17:00:00 

(目前,它是在UTC第9,而它在PDT 8日)。