使用PHP和MySQL处理时间戳(我的理论是否正确?)

时间:2009-02-10 16:29:53

标签: php mysql

我一直在研究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);

这似乎工作正常,但我不确定这是否是“标准”的做法。你有这方面的经验吗?

4 个答案:

答案 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下工作,这应该为应用程序的其余部分设置时区。可能还有其他解决方案,但我发现这是最简单的,因为我并不总是使用数据库中的时间和日期。