2011-04-09 83 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日)。