Php 日期读取错误的时区

Php 日期读取错误的时区,php,date,datetime,Php,Date,Datetime,我有以下日期功能: function fixDate($strDateTime) { $strFormat = 'M, j, Y'; $strFormatTime = '\a\t g:ia'; $intTimeStamp = strtotime($strDateTime); $strDate = date($strFormat, $intTimeStamp); $strTime = date($strFormatTime, $intTimeStamp);

我有以下日期功能:

function fixDate($strDateTime) {
 $strFormat = 'M, j, Y';
    $strFormatTime = '\a\t g:ia';
    $intTimeStamp = strtotime($strDateTime);
    $strDate = date($strFormat, $intTimeStamp);
    $strTime = date($strFormatTime, $intTimeStamp);

    if($strDate == date($strFormat)) {
        return "Today " . $strTime;
    }
    elseif($strDate == date($strFormat, strtotime('yesterday'))) {
        return "Yesterday " . $strTime;
    }
    else {
        return " on " . $strDate . " " . $strTime;
    }
}
我不确定是我的日期函数导致了这种情况,还是我的数据库的结构方式导致了这种情况,但我的页面上的日期是AM,而应该是PM。它也在读美国中部时间,而我需要的是美国东部时间。我将日期存储在phpmyadmin中作为日期类别

我怎样才能更改日期,使其显示为美国东部时间?

尝试更改

function fixDate($strDateTime) {
$strFormat = 'M, j, Y';


我总是将默认时区设置为GMT

# store all data internally as GMT:

#   local tz 1 \
#   local tz 2  + <-> webservice.php <-> gmt tz
#   local tz 2 /

date_default_timezone_set('Zulu');
if( ! defined( 'DATE_FORMAT' ) ) define ('DATE_FORMAT', 'Y-m-d H:i:s');

阅读此文:我建议将所有日期保存为gmt,并在“视图”层中转换为特定时区。因此,我必须在日期函数之前添加此项?…
date\u default\u timezone\u set('America/Cleveland')?或者我会把它放在纽约?两者都是东部时区。@KevinSeifert为什么?还有,我怎样才能知道保存的日期。当我
SHOW CREATE TABLE
为我的数据库表显示它时,我没有得到任何显示它如何保存为。。我得到这个“
date
datetime NOT NULL,`如果您需要进行日期计算,或者最终要处理多个时区,那么将所有内容都用一个通用单位——GMT来表示是很有用的。对于数据库本身,除非您在数据库级别进行日期计算,否则db设置在哪个时区都无关紧要IIRC,通常大多数数据库都会读取操作系统时区,或env VAR,通常是GMT。它仍然显示在中央时间。
# store all data internally as GMT:

#   local tz 1 \
#   local tz 2  + <-> webservice.php <-> gmt tz
#   local tz 2 /

date_default_timezone_set('Zulu');
if( ! defined( 'DATE_FORMAT' ) ) define ('DATE_FORMAT', 'Y-m-d H:i:s');
#####################################################
# TIME UTILS
#####################################################

# STORE ALL TIME DATA AS GMT, ALONG WITH THE ORIGINAL TIME ZONE


# format date string referencing one timezone to another timezone, eg
# 'Zulu' -> 'America/Chicago'
# internally, store all data as GMT,
# where each person has a different view of data
# NOTE: full datetime is require, because of dst
function datetime_convert( $datestr, $from, $to, $format = null ) {

    if ( ! $from ) {
        error_log( "no timezone 'from'" );
        return $datestr;
    }

    if ( ! $to ) {
        error_log( "no timezone 'to'" );
        return $datestr;
    }

    if ( ! $format ) {
        $format = DATE_FORMAT; # defined above
    }

    $date = date_parse( $datestr );
    #print_r( $date );

    $dtime = new DateTime();

    # input in $from timezone
    $dtime->setTimeZone(new DateTimeZone($from));
    $dtime->setDate($date['year'],$date['month'],$date['day']);
    $dtime->setTime($date['hour'],$date['minute'],$date['second']);

    # output in $to timezone
    $dtime->setTimeZone(new DateTimeZone($to));
    $newdatestr = $dtime->format($format);

    return $newdatestr;
}


# convert dates with a GMT offset to offset == 0
# 2012-01-20T15:52:22.000-05:00 -> 2012-01-20T20:52:22.000Z
function datetime_normalize( $datestr ) {
    $dtime = new DateTime( $datestr );
    $dtime->setTimeZone(new DateTimeZone('Zulu'));
    $newdatestr = $dtime->format(DATE_FORMAT);
    return $newdatestr;
}

# convert a local time to GMT
function datetime_to_gmt( $datestr, $from, $format = null ) {
    return datetime_convert( $datestr, $from, 'Zulu', $format );
}

# convert a GMT time to local
function datetime_to_local( $datestr, $to, $format = null ) {
    return datetime_convert( $datestr, 'Zulu', $to, $format );
}