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