PHP/MySQL时间戳和时区

PHP/MySQL时间戳和时区,php,mysql,timezone,timestamp,Php,Mysql,Timezone,Timestamp,如果我在MySQL中使用NOW()函数获取当前时间戳,我可以通过php获取该字段并在不同的时区中给出该时间吗?基本上将当前时区中的当前时间转换为另一个时区?您可以使用以下类: 它还采用大陆/城市的形式,例如欧洲/伦敦 如果您的日期时间不是UTC,则可以使用setTimezone: $datetimeInGMT = new DateTime($now, new DateTimeZone("America/New_York")); $datetimeInGMT->setTimezone(new

如果我在MySQL中使用NOW()函数获取当前时间戳,我可以通过php获取该字段并在不同的时区中给出该时间吗?基本上将当前时区中的当前时间转换为另一个时区?

您可以使用以下类:

它还采用
大陆/城市
的形式,例如
欧洲/伦敦

如果您的日期时间不是UTC,则可以使用
setTimezone

$datetimeInGMT = new DateTime($now, new DateTimeZone("America/New_York"));
$datetimeInGMT->setTimezone(new DateTimeZone("GMT"));

MySQL的时区处理比PHP复杂得多。它处理简单的时区(EST、PST等)和我称之为“区域时区”(美国/东部)。使用区域分区使用适当的转换,包括夏令时,即使DST规则多年来发生了变化

我所做的是使用MySQL函数UTC_TIMESTAMP()将我的所有日期时间存储为UTC。然后,在查询中,我使用MySQL函数CONVERT_TZ()将其转换为我的目标时区。

注意:您可能需要更新您的时区表。

是的,但是如果我已经在不同的时区有了时间戳怎么办?我可以将其转换为不同的时区吗?+1(如果可以,另一个+1表示
DateTime
),但不要忘记,要使其正常工作,您需要知道mySQL服务器的当前时区,以正确确定开始日期!MySQL的时区设置可以不同于系统的时区。@Pekka,您可以通过
SELECT@@session.time\u zone同样,如果您不想使用DateTime类(没有理由不使用,只是说),并且您有一个有效的时间戳或日期(比如2011年1月1日下午5:00,或者2011-01-01 20:00:00),您可以执行类似于
日期(“任何格式”,strotime($timestamp)+$theoffset*3600)
,其中,$timestamp是日期,$theoffset是$timestamp的时区与您希望将其更改为的时区之间的差异(以小时为单位)。由于PHP 5,PHP在这两个方面更为复杂:
DateTime
类完全支持时区。可以设置
DateTime
时间戳并将其交叉转换到任何区域。MySQL根本无法在
DATETIME
字段中存储时区信息。尽管如此,
CONVERT\u TZ
仍然是一种有效的方法,但并不一定有效。阅读Aarons对这个问题的回答
$datetimeInGMT = new DateTime($now, new DateTimeZone("America/New_York"));
$datetimeInGMT->setTimezone(new DateTimeZone("GMT"));