我做了一个小的twitter克隆只是为了学习,我遇到了一个问题,在之前和允许用户选择他们所在的时区之后,他们发推特的时间显示是错误的。
以下是我的代码片段:
/* current date/time whenever they send a tweet */
$time = date('Y-m-d H:i:s');
/* Insert into db as `time` */
/* Time retrieved as $value['time'] & users timezone as $_SESSION['timezone'] */
/* Convert to users timezone */
$users_timezone = new DateTimeZone($_SESSION['timezone']);
$date = new DateTime($value['time']);
$date->setTimeZone($users_timezone);
$new_date = $date->format('M j, o g:i a e');
echo $new_date;
目前洛杉矶地区的时间是上午11:32,但转换后显示下午6:26
我默认在柏林,目前是晚上8:33,但在转换之前,它显示凌晨1点
有人能告诉我这件事吗?第一次这样做。
检查系统时间
请通过ssh运行date
来检查服务器的当前系统时间。
我相信php从系统中获取日期,因此,如果您的系统时间不正确,那么您的php时间也将不正确。
检查$value['time']
您正在DataTime类中使用构造方法。这是该方法的文档。
http://www.php.net/manual/en/datetime.construct.php
确保$value['time']
的格式可接受。一个简单的方法是使用strtotime
函数。这将从$value['time']
生成一个unix时间戳,并且可能满足DateTime类的构造方法。