我正在制作一个小小的推特克隆只是为了学习而且我遇到了一个问题,在允许用户选择他们所在的时区之后,在和之前,显示他们发推文时的时间某些事情是错的。
以下是我的代码片段:
/* 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点
有人能给我任何见解吗?第一次这样做。
答案 0 :(得分:0)
检查系统时间
请通过ssh运行date
来检查服务器的当前系统时间。
我相信php会从系统中获取日期,因此如果您的系统时间不正确,那么您的php时间也会不正确。
检查$value['time']
您正在使用DataTime类中的构造方法。这是该方法的文档。
http://www.php.net/manual/en/datetime.construct.php
确保$value['time']
采用可接受的格式。在轻松完成此操作的过程中,请使用strtotime
函数。这将从$value['time']
生成一个unix时间戳,这可能会满足DateTime类的构造方法。