我有时间/日期问题。我正在尝试将当前日期和时间与当天(午夜)的日期/时间进行比较。 当前时间是:
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分钟?
任何人都可以帮我理解这里的情况吗?我错过了什么?
非常感谢
答案 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:s
是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')