今天是欧洲的2012年第24代。我今天使用mktime
来获取 DateTime 对象,午夜时间。为什么它说 23 gen的23点,而不是 24:00的00:00 ?
var_dump(new DateTime('@' . mktime(0, 0, 0)));
输出:
object(DateTime)[5]
public 'date' => string '2012-01-23 23:00:00' (length=19)
public 'timezone_type' => int 1
public 'timezone' => string '+00:00' (length=6)
答案 0 :(得分:2)
mktime在决定返回的时间应该是什么时使用本地时区信息,并返回与UTC对齐的值。如果要覆盖它,则需要传入明确的is_dst = 0
参数
然后在构造DateTime对象时使用此UTC时间(这是@
所做的),这意味着将小时偏移量复制到DateTime对象中。
由于mktime
使用本地时区信息,如果您想使用 -
gmmktime
$date = DateTime('@' . gmmktime(0, 0, 0));
如果您想要午夜服务器时间,然后将输出转换为用户的时区,例如'Europe / Paris'你会做以下事情:
$date = DateTime('@' . mktime(0, 0, 0));
$date->setTimeZone(new DateTimeZone('Europe/Paris'));
print $date->format(DateTime::RFC850) . "\n";
您可以使用以下方法将其转换为服务器的本地时间:
$date->setTimezone(new DateTimeZone(date_default_timezone_get()));