我在UTC中的日期时间字段中将日期存储在MySQL数据库中.我正在使用PHP,并且我调用了date_timezone_set('UTC'),以便所有对date()的调用(没有时间戳)以UTC格式返回日期.
然后,我有它,所以给定的网站可以选择其时区.现在我希望日期显示在网站的时区.因此,如果我将日期存储为"2009-04-01 15:36:13",则应在PDT时区(-7小时)内为用户显示为"2009-04-01 08:36:13" .
通过PHP执行此操作的最简单(最少代码)方法是什么?到目前为止,我所想到的只是
date('Y-m-d H:i:s', strtotime($Site->getUTCOffset() . ' hours', strtotime(date($utcDate))));
有更短的方式吗?
为什么不使用内置的DateTime/TimeZone功能?
setTimezone(new DateTimeZone('America/Los_Angeles')); ?>
DateTime类:http://us3.php.net/manual/en/class.datetime.php DateTimeZone类:http://us3.php.net/manual/en/class.datetimezone.php
PHP支持的时区:http://php.net/manual/en/timezones.php
你正在做的是正确的做事方式.我建议坚持只使用UTC工作,并在最后一分钟转换显示.
这是我使用PHP附带的DateTime类进行时区转换的快速函数.它比你有更多的代码,但我认为它更简单,更好的结构化方式......
function convert_time_zone($date_time, $from_tz, $to_tz) { $time_object = new DateTime($date_time, new DateTimeZone($from_tz)); $time_object->setTimezone(new DateTimeZone($to_tz)); return $time_object->format('Y-m-d H:i:s'); }
http://richardwillia.ms/blog/2011/04/time-zone-conversion-using-datetime-class/
希望有所帮助.
这是我们对服务器所做的.我们将所有内容设置为使用UTC,并通过动态转换显示在用户的时区中.这篇文章底部的代码是如何使其工作的一个例子; 您应该确认它适用于您的设置(即夏令时等)的所有情况.
编辑/etc/sysconfig/clock
并设置ZONE
为UTC
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
如有必要,将时区导入MySQL:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
编辑my.cnf并在[mysqld]部分中添加以下内容:
default-time-zone = 'UTC'
format('U'); return ($ret < 0 ? 0 : $ret); } public static function UTCToPST($format, $time) { $dst = intval(date("I", $time)); $tzOffset = intval(date('Z', time())); return date($format, $time + $tzOffset - 28800 + $dst * 3600); } }