理论问题.
想象一下情况.我需要今天的日期和时间(不是现在,但今天 - 当天的开始).我可以使用以下代码执行此操作:
$now = time();
$today = date('Y-m-d H:i:s', mktime(0, 0, 0, date("m", $now), date("d", $now), date("Y", $now)));
Run Code Online (Sandbox Code Playgroud)
或这个:
$now = getdate();
$today = date('Y-m-d H:i:s', mktime(0, 0, 0, $now['mon'], $now['mday'], $now['year']));
Run Code Online (Sandbox Code Playgroud)
在我看过的大多数例子中,使用了第一种方法.问题很简单:为什么?第一个使用3个函数调用来获取月,日和年.
Cha*_*les 13
这两个选项都非常糟糕 - 如果你想在午夜将当前日期作为格式化字符串,它就像下面这样简单:
date('Y-m-d') . ' 00:00:00';
Run Code Online (Sandbox Code Playgroud)
或者,如果你想要更明确一点,
date('Y-m-d H:i:s', strtotime('today midnight'));
Run Code Online (Sandbox Code Playgroud)
没必要做那个古怪的mktime事情.编写该代码的人不知道他们在做什么和/或是复制粘贴/货物崇拜开发者.如果你真的在"大多数例子"中看到了这一点,那么你所和之外的人群就会深感困扰,你应该不再和他们一起出去玩.
唯一有趣的事情mktime是尝试使用当地时区.如果您的工作是时区敏感的,并且您正在使用PHP 5.3或更高版本,请考虑使用DateTime和DateTimeZone.来自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
Run Code Online (Sandbox Code Playgroud)
(目前,它是UTC中的第9位,而它是PDT中的第8位.)