【问题标题】:Modify TIMESTAMP to reflect correct TIMEZONE修改 TIMESTAMP 以反映正确的 TIMEZONE
【发布时间】:2014-10-14 02:01:02
【问题描述】:
所以我正在尝试将时间戳提交到我的 MySQL 表中。它使用这行代码成功地完成了它,但是时区不正确。有人知道需要做什么来确保更新时间戳以反映美国/纽约吗?
<input type="hidden" name="hiddenField" id="hiddenField" value=<?php $query = "UPDATE ApparatusTrouble SET _submitted_ = CURRENT_TIMESTAMP ";
【问题讨论】:
标签:
php
mysql
timezone
timestamp
【解决方案1】:
不要试图控制时区,因为它存储在数据库中。时间戳将是 UTC 中的当前时间,也就是说,它是一个全球通用且独立于时区的时间戳。
如果您想将时间显示为纽约时间,这是您的显示逻辑的问题:从数据库中检索 UTC 时间戳,然后将其转换为纽约时间并显示。
【解决方案2】:
TIMESTAMP 存储不带时区,当您从 Mysql 检索数据时由 mysql 服务器应用时区,因此您需要像这样为您的 mysql 连接正确设置时区,
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
SET @@session.time_zone = "+00:00";
更好的做法是设置 +00:00 进行连接,例如在开始 php 脚本中在客户端应用时区后
【解决方案3】:
如果可以的话,我建议使用 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 . ';';
...
?>