如何在插入mysql之前将now()转换为GMT +8

时间:2015-07-04 11:57:15

标签: php mysql

这是我的SQL,用于在发出请求密码时插入当前时间。

$stmt2 = $pdo->prepare('UPDATE authsessions SET reset_req=now(), reset_req_uuid=:reset_uuid WHERE useruuid=:user_id');

这会引起混淆,因为它遵循服务器的时区来插入时间。

因此,在我的本地主机中,它会在我在页面中声明的时间插入亚洲/吉隆坡时间。但在亚马逊服务器中,我相信它会相应地插入GMT。但我想强制它在亚洲/吉隆坡插入时间。这是因为该网站意味着在马来西亚使用,并且没有使用GMT时间。

如何在插入前将now()转换为GMT 8+,请?

2 个答案:

答案 0 :(得分:2)

您可以使用model.setRowCount(0); 转换语句中的时区(请参阅MySQL manual)。

答案 1 :(得分:0)

首先,它取决于您使用的MySQL字段。如果您使用TIMESTAMP字段,它将作为UTC时间戳存储在数据库中。这是最简单的一个,因为您的php连接将使用本地服务器的时区。这样您就不必转换任何时区问题。

如果您使用的是DATETIME字段,它将按原样存储时间。 Mysql NOW()将使用数据库时区设置,您可以在连接时覆盖设置:

SET time_zone = '+08:00';

您拥有的另一个选项是从PHP处理时区。例如:

$now = new DateTime('NOW', new DateTimeZone('Asia/Kuala_Lumpur'));
$stmt2 = $pdo->prepare('UPDATE authsessions SET reset_req=:now, reset_req_uuid=:reset_uuid WHERE useruuid=:user_id');
$stmt2->bindParam(':now', $now->format('Y-m-d H:i:s');