2015-08-21 61 views
1

我有以下的日期函数:日期读错时区

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; 
    } 
} 

我不知道这是否是导致我这日期功能或我的数据库的结构的方式,但日期当它应该是PM时,我的页面正在读AM。它也读美国 - 中部时间,当我需要美国 - 东部时间。我将日期存储在phpmyadmin中作为Date类别。

如何更改日期以便读取美国东部时间?

+0

阅读:http://php.net/manual/en/function.date-default-timezone-set.php – Berriel

+1

我建议你保存所有日期为GMT,并转换到“视图”层中的特定时区。 –

+0

所以我不得不在我的日期函数之前添加这个...'date_default_timezone_set('America/Cleveland');'?或者我会在纽约?两者都是东部时区。 – Paul

回答

0

尝试改变,

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

function fixDate($strDateTime) { 
$strFormat = 'M, j, Y'; 
date_default_timezone_set('America/New_York'); 
+0

它仍在中央时间显示。 – Paul

+0

我作了更新 – sriharichander

+0

仍显示中央。 – Paul

1

我总是默认时区设置为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到本地时区中的“视图“层。当地时区是一个需要解决的主要问题,尤其是夏时制。 :-)

##################################################### 
# 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); 
}