我有一个自定义编写的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
,它在一天内停止计算…我错过了什么?
$when = date($format, strtotime($when))正在将日期时间转换为您定义的格式。
因此,当您尝试转换时区时,$when将错过日期的时间。