php getdate()vs date()

时间:2011-04-09 04:23:00

标签: php date getdate

理论问题。

想象一下情况。我需要今天的日期和时间(不是现在,但今天 - 当天的开始)。我可以使用以下代码执行此操作:

$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个函数调用来获取月,日和年。

1 个答案:

答案 0 :(得分: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交互式提示的演示:

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位。)