我一直在研究PHP和PHP的时间戳。 MySQL的。我的承诺是UNIX时间戳只存在于GMT中...重点是你将其转换为用户时区(GMT +/- timezone = users localtime)。我通过将时间戳保存为“原始”形式(作为10位长的int)并将其转换为查询中的本地时间来成功地完成此任务
$row = $result->fetchRow(DB_FETCHMODE_ASSOC); $timestamp = $row['stamp']; date_default_timezone_set('America/New_York'); echo date("d/m/y : H:i:s", $timestamp);
这似乎工作正常,但我不确定这是否是“标准”的做法。你有这方面的经验吗?
答案 0 :(得分:3)
你的方法很好:)
您可能希望在更全球范围内设置时区,例如在用于登录的任何PHP脚本上,而不是每次使用日期函数时都要调用它。如果由于某种原因,您改变主意并希望标准化时区或类似的东西,这也可以更容易地进行更改。
在MySQL中管理Unix时间戳的最佳方法实际上是UNIX_TIMESTAMP()函数。没有任何参数的UNIX_TIMESTAMP()只返回当前的Unix时间,而不是像
那样$time=time();
mysql_query('UPDATE table SET time='.$time.' WHERE what="ever"');
你可以直接在查询中直接使用UNIX_TIMESTAMP来完成额外的工作:
mysql_query('UPDATE table SET time=UNIX_TIMESTAMP() WHERE what="ever"');
更干净!
答案 1 :(得分:1)
我认为没有办法在MySQL中指定日期时间或时间戳字段的时区。
因此,您必须使用一个时区在数据库中存储日期和时间,并在必要时将其转换为另一个时区。您可以使用类似Zend Framework的Zend_Date组件来进行转换。
我认为没有“标准”方式来玩时区和MySQL,你必须自己设置。
对于我的客户,每个人只在一个时区工作,所以我在PHP脚本中做的第一件事就是如你所说的那样用date_default_timezone_set
设置时区。但是在执行此操作时,您应该使用函数NOW()(或其他日期和时间函数)来查看查询,因为MySQL可能设置为您在date_default_timezone_set
中使用的时区的其他时区。
答案 2 :(得分:1)
mysql-server以独立于时区的格式(UTC)存储日期 但在存储日期之前,它将使用其时区进行转换。
你可以改变每个连接的mysql时区* 1:
mysql_query('SET time_zone = "'.$timezone.'"');
您还可以更改每个脚本的时区。
date_default_timezone_set($timezone);
如果你将它们设置为相同的时区“2009-01-10 13:30:00”对mysql和php都意味着同样的事情。
但请记住,2台服务器具有不同的内部时钟值,因此如果要根据当前时间生成时间戳。在mysql或php中执行此操作。
* 1) MySQL时区支持可能需要额外配置。检查manual
答案 3 :(得分:0)
我使用putenv在php中设置时区。如果您在GMT下工作,这应该为应用程序的其余部分设置时区。可能还有其他解决方案,但我发现这是最简单的,因为我并不总是使用数据库中的时间和日期。