5

理论问题。

想象一下情况。我需要获取今天的日期和时间(不是现在,而是今天 - 一天的开始)。我可以使用以下代码来做到这一点:

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

4

1 回答 1

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

于 2011-04-09T06:51:01.077 回答