修改TIMESTAMP以反映正确的TIMEZONE

时间:2014-08-20 15:58:52

标签: php mysql timezone timestamp

所以我正在尝试将时间戳提交到我的MySQL表中。它使用这行代码成功完成,但时区不正确。任何人都有关于确保时间戳更新以反映美国/纽约需要发生什么的想法?

<input type="hidden" name="hiddenField" id="hiddenField" value=<?php $query = "UPDATE ApparatusTrouble SET _submitted_ = CURRENT_TIMESTAMP ";  

3 个答案:

答案 0 :(得分:1)

请勿尝试控制存储在数据库中的时区。时间戳将是UTC的当前时间,也就是说它是一个全局理解和与时区无关的时间戳。

如果您希望将时间显示为纽约时间,则显示逻辑的问题:从数据库中检索UTC时间戳,然后将其转换为纽约时间并显示它。

答案 1 :(得分:0)

TIMESTAMP存储没有时区,当你从Mysql中检索数据时由mysql服务器应用时区,所以你需要为你的mysql连接正确设置时区,

SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";

更好的练习设置为+00:00进行连接,并在客户端的aplying timezone之后以开始php脚本为例

答案 2 :(得分:0)

我建议使用PHP来生成时间戳,如果你能坚持使用UTC(它可以避免时区混淆)。

此外,您正在这样做的方式客户端可以修改表单数据并提交SQL,这不是设计代码最安全的方式(如果您不知道)。

此外,如果您在处理PHP时生成时间戳并将其加载到隐藏的表单变量中,那么它将具有PHP处理表单的日期,而不是表单提交的时间。

IE。

在PHP中提交的表单操作中的某处...

<?php
...

date_default_timezone_set('UTC'); //Available since PHP 5.1

//see php date manual (http://php.net/manual/en/function.date.php)
// not sure what format CURRENT_TIMESTAMP is set to in your SQL server
  $now = date("Y-m-d H:i:s", time());
  $query = 'UPDATE ApparatusTrouble SET _submitted_ = ' . $now . ';';

...
?>