【问题标题】:Adjust "NOW()" timezone调整“NOW()”时区
【发布时间】:2012-07-06 07:59:36
【问题描述】:

现在我的查询看起来像这样(相关部分):

UPDATE last_seen=NOW()

但它插入的时间比我的早 2 小时。有什么办法可以调整吗?

谢谢

【问题讨论】:

  • NOW() 包含服务器时区的时间
  • @w0rldart 是的,但显然在这种情况下我需要调整它:)
  • @Johan,我已经给你一个详细的答案,用不同的方法来解决你的问题......希望你觉得它有用

标签: php mysql


【解决方案1】:

在您的数据库上设置时区.. 看看这篇文章。 https://stackoverflow.com/a/3451971/1227435

这是另一个很棒的资源:

Having Timezone problems with PHP and MySQL

【讨论】:

  • 假设您使用的是 mySQL 数据库。你用的是什么数据库?
  • 是的,它的 mySQL,很抱歉没有提到这一点。所以我只是在查询结束时传递时区?
  • 你明白了吗?看@UTC_TIMESTAMP()
【解决方案2】:

听起来 MySQL 和你不在同一个时区。

你有一些选择:

  • 为 MySQL 设置时区。
  • 使用 PHP 设置存储前的日期。
  • 存储为 UTC 时间戳,然后 显示 正确的本地时间。更多代码,但我推荐。

【讨论】:

  • 如果使用 php 日期函数,timestamp 的有效日期格式是什么?
【解决方案3】:

http://dev.mysql.com/doc/refman//5.5/en/time-zone-support.html 你需要设置 MySQL 的时区概念。希望对您有所帮助...

【讨论】:

    【解决方案4】:

    我建议你尝试这样的事情:

    有一个hidden input 来收集用户的时区

    <input type="hidden" name="offset" class="offset">
    $('.offset').val(new Date().getTimezoneOffset());
    

    然后在更新之前获取它并像这样将其转换为秒

    $offset    = intval($_REQUEST['_offset']) * 60;
    

    最后添加到time():

    $now = time() + $offset;
    

    执行上述操作后,您就有了一个变量,其中包含客户在其时区中的时间。如果您不想这样,并且希望每个人都有一个共同的时间,只需在您的index.php 中设置您的时区:

    date_default_timezone_set('TIMEZONE IN HERE'); //Supported timezone list: http://www.php.net/manual/en/timezones.php
    

    但最好将其设置在php.ini(时区)或更改服务器的时区(Debian/Ubuntu:dpkg-reconfigure tzdata

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-15
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 2017-12-09
      • 2011-04-22
      • 1970-01-01
      相关资源
      最近更新 更多