【问题标题】:MySql GMT Dates and TimezonesMySql GMT 日期和时区
【发布时间】:2011-06-01 11:16:32
【问题描述】:

我有一个 php 应用程序,我在时间戳字段 (mySQL) 中将事件日期存储在 GMT +0000 中。请忽略下面的大部分代码,因为它来自我正在处理其他时区的函数 - 它只是为了表明我正在将任何日期输入转换为 GMT +0000 以存储在数据库中。就这个问题而言,偏移量 = 0。

date_default_timezone_set('GMT');
$gmtTimezone = new DateTimeZone('GMT');
$userTimezone = new DateTimeZone('GMT');
$myDateTime = new DateTime(date('Y-m-d H:i'), $gmtTimezone);
$offset = $userTimezone->getOffset($myDateTime);
$event_date = date('Y-m-d H:i', $myDateTime->format('U') + $offset);
$q = "insert into time_zone(dtime) values('".event_date."')";
$r = mysql_query($q);

这似乎运作良好。因此,即使我的服务器在美国运行,该字段中存储的日期也是伦敦日期/时间。

现在我的挑战是这个。我的客户需要定位在日期/时区内发生的事件,但他们将在自己的时区工作。例如太平洋/奥克兰 (GMT + 13)。

因此,如果客户端输入开始“2010-12-30 00:01”的搜索日期和搜索“2010-12-30 23:01”的结束日期,我如何传入 SQL 语句这基本上告诉数据库在日期字段中搜索值(存储为 GMT + 0000),但由于时区是太平洋/奥克兰,所以添加 13 小时(或负数)。考虑到夏令时等,是否有一种 mySQL 方式来执行此操作...

因此,如果存储了“2010-12-30 08:17:00”的 GMT 日期,并且我居住在奥克兰的客户使用高于此记录“2010-12-30 08:17:00”的日期进行搜索,那么应该会出现向上,因为 GMT +13 涵盖了搜索。

【问题讨论】:

    标签: mysql datetime


    【解决方案1】:

    在将日期时间发送到数据库之前,客户端应将日期时间从本地时间转换为 GMT / UTC。

    【讨论】:

    • 你好,马克。感谢您的快速回复。在这种情况下,“客户”是我的代码需要接受客户对搜索的日期要求——我知道客户的时区,所以我需要减去搜索日期的偏移量,在我的情况下是 13 小时。它是否正确?如果是这样,我认为存在负偏移值,所以我必须减去偏移量?
    • 一个代码示例会很棒!也许我应该使用 DateTime 对象将本地时间转换为 GMT?
    • @Marc:是的,您可以从 PHP 中查看 setTZByIDconvertTZByID
    • 谢谢你,马克 - 你很有帮助。我想我已经完成了。
    • @Marc:顺便说一句,MySQL 中也有一个 CONVERT_TZ 函数:dev.mysql.com/doc/refman/5.0/en/… - 如果您的时区信息存储在数据库中,您可能会发现这更方便,但恕我直言,您越早转换日期时间到UTC,更好。
    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多