mysql时区-在回送行之前添加额外的小时数

uajslkp6  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(297)

我有一个叫做温度的mysql表
我的一个属性叫做“now”,它显示服务器上的时间戳。
架构:

now (current_time), id (auto increment), temp (varchar 50)

now属性示例

2018-06-07 11:19:46
2018-06-08 02:06:12

我没有权限更改服务器上的时间。
在读取now值后,如何将5.5小时添加到now?
我现在要读的代码

$sql = "SELECT id, now, temp FROM temperature";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
   while($row = $result->fetch_assoc()) {
      echo "id: " . $row["id"]. " - Time: " . $row["now"]. " . - Temperature: ". $row["temp"]. "<br>";
  }

 } else {
echo "no data";
 }

这可能吗?我可以在回音前加5.5小时吗?

gmol1639

gmol16391#

您可以在查询中使用mysql的addtime函数。

SELECT id, ADDTIME(now, "5:30:0") AS now_added FROM temprature;
wtlkbnrh

wtlkbnrh2#

看看这个使用strtotime和date函数的示例代码,在回显示例之前添加:

$selectedTime = $row['now'];
  $endTime = date("H:i:s" ,strtotime("+5 hours 50 minutes", strtotime($selectedTime)));
  echo $endTime;
ecfsfe2w

ecfsfe2w3#

看起来你的问题涉及到印度国家时区(+5:30)。zoneinfo数据库中的时区名称是 Asia/Kolkata .
我猜从你的问题,你正在试图转换时间从世界时协调(utc)到印度时间。
重要的是你的 now 属性作为 DATETIME 或者 TIMESTAMP 列。你的问题没有提供足够的信息让我们知道这一点;这两种数据类型都使用文本字符串呈现,例如 2018-07-08 13:31:20 .
如果你的 now 属性是 TIMESTAMP 你的处境很好。为什么?mysql存储 TIMESTAMP 参考世界时协调的值。因此,您只需设置mysql连接的时区,然后执行select查询,通过依次运行这两个查询,并分别调用 query() 方法。

SET time_zone = 'Asia/Kolkata';
SELECT id, now, temp FROM temperature;

mysql将转换您的 now 印度时间的价值观。
如果你的 now 列具有 DATETIME 数据类型,表示表中的数据存储时不引用任何时区。在这种情况下,您可以使用此查询将这些值从utc转换为印度时间。

SELECT id, CONVERT_TZ(now,'UTC','Asia/Kolkata') AS now, temp FROM temperature

为了使用mysql的时区支持,您可能需要填充服务器的时区表。请告诉服务器管理员这样做,或者查看此页以获取说明。https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html

相关问题