PHP:时区调整函数计算Y-m-d H:i:s与Y-m-d不同

时间:2015-07-28 05:37:10

标签: php datetime

我有一个自定义编写的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,它会在一天内停止计算......我错过了什么?

1 个答案:

答案 0 :(得分:1)

$ when = date($ format,strtotime($ when)将日期时间转换为您定义的格式。

因此$ when会在您尝试转换时区时错过日期的时间。