【问题标题】:Formatting MySQL / Server timestamp with php?用php格式化MySQL/服务器时间戳?
【发布时间】:2016-02-09 13:10:47
【问题描述】:

我在 MySQL 中创建了一个时间戳,当用户更新帐户时该时间戳会发生变化,并且该时间戳会在页面上回显。但是它显示的是服务器时间而不是我的本地时间。我无法在 MySQL 中设置时区,我试过了。还有什么方法可以改变这种情况,如何实施?

【问题讨论】:

  • 您可以设置默认时区。像这样:date_default_timezone_set('Europe/Lisbon');$tz = date_default_timezone_get();
  • @PathikVejani 之前厌倦了,它不起作用:)
  • 如果你真的想用PHP改变它,你可以在插入的时候得到你当前的时间,然后将它转换为时间戳(然后插入那个值,当然)你可以检查php.net/manual/en/function.strtotime.php跨度>
  • @Armin 有用的链接!谢谢。但是你将如何实现呢? jsfiddle.net/yj5ccjmu 如果有更简单的方法,我不需要或不想改变它。
  • 实际上你可以通过提供正确的格式来插入它。例如 2016-02-09 13:31:20,你可以这样得到 $date = date('Y-m-d H:i:s');并尝试将此值保存到数据库?如果我遗漏了什么,我很抱歉......

标签: php mysql timezone


【解决方案1】:

timestamp datatype 的问题在于

MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 存储,并从 UTC 返回到当前时区进行检索。 (这不会发生在其他类型,例如 DATETIME。)默认情况下, 每个连接的当前时区是服务器的时间。这 时区可以在每个连接的基础上设置。只要时间 区域设置保持不变,您将获得与存储相同的值。 如果您存储一个 TIMESTAMP 值,然后更改时区和 检索值,检索到的值与值不同 你存储的。

所以,你在 php 中的时区设置是什么并不重要,你需要在会​​话的基础上使用 mysql 的时区设置

SET time_zone = timezone

命令,或者您需要将客户端的时区与时间戳一起存储并根据存储的时区调整值。我会使用后一种方法,因为从技术上讲,客户端可以更改时区,如果客户端从不同的时区访问时间戳数据,那么 mysql 将返回不同的数据。

【讨论】:

  • 伙计,你看他说什么了吗?他说他不能在mysql中设置时区他厌倦了。
  • @AboutLeros Mate,你读了吗,我写了什么?我写了 either 以在 mysql 中基于连接设置时区,将客户端时区存储在数据库中。我建议使用后一种方法!
  • 认真的吗?如果他们不知道“alter”和“format”之间的区别,你认为他们会明白或能够做到吗? :D
【解决方案2】:

当从数据库回显时,添加一些“过滤器”似乎可以解决问题

<?php echo $row['field name']; strtotime(date("Y-m-d", 1310571061)); ?>

没有上面的代码,它显示的时间戳为:2016-02-09 00:00:00 使用上面的代码,它显示如下:2016 年 2 月 9 日,星期二

【讨论】:

  • 这与服务器时间或本地时间无关。这只是格式化相同的时间以不同的方式显示。
  • 是的,没有人建议过,是吗。 .那么,如果我可以格式化显示的内容,我为什么要更改服务器时间。 . .当然,这与它有关。 . .它改变了它。
  • 只是您在问题中提出的建议。你不改变时间,你格式化它,这是一个巨大的差异!
猜你喜欢
  • 2011-10-03
  • 1970-01-01
  • 2021-12-21
  • 2015-11-28
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多