php时间'关闭'8小时14分钟

时间:2014-10-07 20:11:03

标签: php date strtotime

我有时间/日期问题。我正在尝试将当前日期和时间与当天(午夜)的日期/时间进行比较。 当前时间是:

echo date('d M, Y H:i:s e')."<br>";

这正如预期的那样回归:“2014年10月7日12:51:25 America / Los_Angeles”

然后在今天开始的午夜时间,我有:

echo date('d M, Y H:i:s e',strtotime(date('D, d M, Y')))."<br>";

返回此:“2014年10月7日20:14:00 America / Los_Angeles”

10(晚上8点)是奇数,因为UTC不应该是08:00而不是20:00?和14分钟?

任何人都可以帮我理解这里的情况吗?我错过了什么?

非常感谢

2 个答案:

答案 0 :(得分:1)

您正在向strtotime函数发送一个令人困惑的日期字符串。

如果您尝试这样做:

echo date('d M, Y H:i:s e').'<br>';
echo date('d M, Y H:i:s e',strtotime(date('Y-m-d H:i:s')))."<br>";

您将获得一致的结果,因为Y-m-d H:i:sstrtotime使用的更好格式。

来自docs on strtotime

  

函数期望给出一个包含英文日期格式的字符串,将尝试将该格式解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数) ,相对于现在给出的时间戳,或者当前时间(如果现在没有提供)。

  

为避免潜在的歧义,最好尽可能使用ISO 8601(YYYY-MM-DD)日期或DateTime :: createFromFormat()

要获得你在午夜寻找的时间(我不会建议这种做法):

echo date('d M, Y H:i:s e',strtotime(date('Y-m-d')))."<br>";

您可以轻松输出一个永恒的&#34;日期并直接在日期函数中插入静态00:00:00

echo date('d M, Y 00:00:00 e')."<br>";

但我喜欢使用DateTime objects

$midnight = new DateTime('today');
echo $midnight->format('d M, Y H:i:s e').'<br>';
// Output from sandbox is: 07 Oct, 2014 00:00:00 US/Pacific<br>

很好的部分是你可以轻松地比较它们而无需任何额外的操作:

$now = new DateTime('now'); // 2014-10-07 12:34:56
$midnight = new DateTime('today'); // 2014-10-07 00:00:00

var_dump($now > $midnight); // true
var_dump($now < $midnight); // false
var_dump($now === $midnight); // false
var_dump($now !== $midnight); // true

答案 1 :(得分:1)

date('Y-m-d H:i:s')为您提供当前时间,而不是午夜时间。尝试使用下一个代码:

echo date('d M, Y H:i:s e',strtotime(date('Y-m-d 00:00:00')))."<br>";

&#34; 00:00:00&#34;设定时间到午夜。

你可以使用这个简单的变体:

echo date('d M, Y 00:00:00 e')