php - mySQL 时区转换

标签 php mysql

在我的数据库中,updateTime 设置为 TIMESTAMP 和 CURRENT_TIMESTAMP。但是当我显示数据时,数据库中记录的时间不是我的本地时区,而是 3 小时后。如何通过转换此 SQL 语句来减去这 3 个小时?我可以使用 CONVERT_TZ 以某种方式与此语句内联吗?我不知道该怎么做。

SELECT updates.updateID, updates.windowStatus, updates.onDeck, updates.updateComments,    TIME_FORMAT(`updateTime`,'%r') AS showtime FROM updates ORDER BY updates.updateID DESC LIMIT 1

最佳答案

服务器时区可以由每个客户端(每个连接)设置,以便接收 UTC 以外的其他 TZ 中的数据。为此,您只需使用:

SET time_zone = timezone;

timezone 的值可以作为 UTC 的偏移量('+10:00', '-6:00', ...)或指定时区(例如“欧洲/赫尔辛基”、“美国/东部”或“MET”)。因此,如果我没记错的话,您可以设置自己的 TZ,以便在“+3:00”接收数据。

请考虑到 mysql 服务器完成的偏移量仅影响 NOW()CURTIME() 以及存储在 TIMESTAMP 中和从中检索的值code> 列(这就是您要查找的内容)。

您可以使用其他方式

SELECT @@global.time_zone, @@session.time_zone;

获取全局和特定于客户的时区。

有更多相关信息(这实际上是我所写内容的总结):Time-zone support (mysql.com) .

就您而言,您可能会遇到这样的情况:

<?php
mysql_select_db($database_casualconnnect, $casualconnnect); 

$set_tz_query = "SET time_zone = '+1:00'";
mysql_query($set_tz_query, $casualconnnect) or die(mysql_error()); 

$query_Recordset2 = "SELECT updates.updateID, updates.windowStatus, 
    TIME_FORMAT(`updateTime`,'%r') AS showtime, updates.onDeck, updates.updateComments 
    FROM updates ORDER BY updates.updateID DESC LIMIT 1"; 

$Recordset2 = mysql_query($query_Recordset2, $casualconnnect) or die(mysql_error()); 
$row_Recordset2 = mysql_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysql_num_rows($Recordset2); 

?>

关于php - mySQL 时区转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18626876/

相关文章:

php - 多个 IN 运算符 mysql 组合

php - 在php中提交表单时如何保留下拉列表的值?

php - 将查询优化为一个

php - 如何修复 PHP_Beautifier 的空行?

php - 将 php 数组值用于带有内爆函数的 mysql 插入查询

php - mysql查询比较2个日期范围

mysql - SQL - 根据列值删除所有表中的行

Mysql - 如果存在整个相同的行,则在插入新行时忽略警告

MySQL - 跨地理位置创建多个写入服务器和同步的最佳方法

mysql - rake 数据库 :create generated "if you set the charset manually, make sure you have a matching collation" error