我正在尝试获取各个时区的本地时间以进行时钟处理-例如,现在在英国,现在是12月28日的09.07。
我创建了两个函数来帮助解决这个问题:
function dateLocal($timezone='Europe/London') {
$date = date("Y-m-d");
$given = new DateTime($date, new DateTimeZone("UTC"));
$given->setTimezone(new DateTimeZone($timezone));
$output = $given->format("Y-m-d");
return $output;
}
function dateTimeLocal($timezone='Europe/London') {
$datetime=date("Y-m-d H:i:s");
$given = new DateTime($datetime, new DateTimeZone("UTC"));
$given->setTimezone(new DateTimeZone($timezone));
$output = $given->format("Y-m-d H:i:s");
return $output;
}
我以檀香山为例,因为测试的日期是“昨天”。
如果只有日期,它就可以正常工作:
echo dateLocal("Pacific/Honolulu");
2018-12-27
但是,如果我想返回日期和时间,则会错误地返回:
wcho dateTimeLocal("Pacific/Honolulu");
2018-12-28 00:07:23
我希望它会返回:
2018-12-27 23:07:23
为什么它们返回不同的值?
答案 0 :(得分:1)
结果不同的原因是函数中的日期不同。当您执行\\n
时,时间将设置为午夜。但是,当您执行date('Y-m-d')
时,时间将设置为实际的实际时间。如果您这样做:
date("Y-m-d H:i:s");
在每个功能中,在设置时区之前,您将获得如下结果:
echo $given->format('Y-m-d H:i:s');