我有一个自定义编写的PHP函数,它将传递的传递值转换为用户的时区(getSystem('timezone')
行)。这是功能:
function dateAdjusted($format = 'Y-m-d H:i:s', $when = null) {
if(is_int($when)) $when = date($format, $when); // already in epoch, change to string
else $when = date($format, strtotime($when));
$utc_date = DateTime::createFromFormat($format, $when, new DateTimeZone('UTC'));
$local_date = $utc_date;
$zone = getSystem('timezone');
$zone_obj = new DateTimeZone($zone);
$local_date->setTimeZone($zone_obj);
$result = $local_date->format($format);
return $result;
}
请注意,它始终从UTC转换,因为它是我们在数据库中存储的内容。在时区设置为America/New_York
的系统上,我得到一个奇怪的错误:
echo dateAdjusted('Y-m-d H:i:s', strtotime('2015-07-28 00:00:00')); // 2015-07-27 20:00:00
echo dateAdjusted('Y-m-d', strtotime('2015-07-28 00:00:00')); // 2015-07-28
我所做的就是删除H:i:s
,它会在一天内停止计算......我错过了什么?
答案 0 :(得分:1)
$ when = date($ format,strtotime($ when)将日期时间转换为您定义的格式。
因此$ when会在您尝试转换时区时错过日期的时间。