我正在尝试为检查记录更改添加日期时间.我在表中使用datetime数据类型.
`date_added` datetime DEFAULT '0000-00-00 00:00:00',
date("Y-m-d H:i:s");
问题是这个功能日期(“Y-m-d H:i:s”);当我在服务器上同时检查时给我两个不同的日期和时间.
Localhost结果
date("Y-m-d H:i:s"); == 2016-07-12 13:10:04
服务器结果
date("Y-m-d H:i:s"); == 2016-07-12 05:08:07
所以当我在date_added列上使用TimeAgo函数时,它给了我错误的时间,我的意思是服务器时间.例如,我添加一个记录然后功能将返回我记录添加8小时前所以它完全错误.我想知道如何将事件的实时添加到我可以使用TimeAgo()函数显示的数据库中.
有没有办法在不更改服务器时区的情况下做到这一点,因为如果我更改时区,那么它将只显示那些位于同一区域但会获得其他区域的人的正确时间?我认为他们将面临同样的问题.
我想开发类似Facebook DateTime功能的东西.
任何人都可以指导我如何实现这种功能?我想要感激.谢谢
ALTER TABLE `your_table`
CHANGE `date_added` `date_added`
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
This will change your column from a DATE column to a TIMESTAMP column,将所有日期转换为过程中各自的UTC时间戳.
插入新行时,it will use the current timestamp as a value.时间戳始终为UTC,因此您不必更改MysqL服务器上的时区,也不必在插入新行时提供日期.
如果您不能或不想更改列,您也可以选择时间戳
SELECT UNIX_TIMESTAMP('date_added') FROM your_table;
对于你的TimeAgo,你可以做到
$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);
当您向DateTime提供时间戳时,无论您设置的是哪个默认服务器时区,它都将始终使用UTC.因此,您必须将$dateAdded转换为默认时区(如上所示)或将$timeSinceAdded转换为UTC.
要将dateTime更改为当前访问用户的时区,您要么
>需要在您的数据库中包含此信息,例如因为您要求注册用户提供此信息
>或you determine it at runtime,usually by doing a GeoIP lookup on the visiting user’s IP or by sending the DateTime Offset from the user’s browser.
在任何情况下,您只需将两个DateTimes更改为该时区. This is easily done via setTimezone()
.
$timeSinceAdded将是DateInterval对象,which you can use like this
echo $timeSinceAdded->format('%a total days');
有关更多详细信息,请参阅链接,例如可用的格式修饰符.