我有php应用程序,我在时间戳字段(mySQL)中以GMT +0000存储事件日期。请忽略下面的大部分代码,因为它来自我正在处理其他时区的函数 - 它只是为了表明我将任何日期输入转换为GMT +0000以存储在db中。出于这个问题的目的,偏移= 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);
这似乎运作良好。因此,即使我的服务器在美国运行,该字段中存储的日期也是伦敦日期/时间。
现在我的挑战是这样的。我的客户需要查找在日期/时区内发生的事件,但他们将在自己的时区工作。例如Pacific / Auckland(GMT + 13)。
因此,如果客户输入的搜索日期为“2010-12-30 00:01”,搜索“2010-12-30 23:01”的结束日期如何传入SQL语句这基本上告诉数据库搜索日期字段中的值(存储为GMT + 0000),但由于时区是太平洋/奥克兰,因此增加13小时(或负数)。有没有一种mySQL方法可以考虑夏令时等...
因此,如果GMT日期为“2010-12-30 08:17:00”并且我的客户居住在奥克兰,请搜索上述日期,此记录“2010-12-30 08:17:00”应该会出现因为GMT +13涵盖了搜索。
答案 0 :(得分:1)
客户端应将日期时间从本地时间转换为GMT / UTC,然后再将其发送到数据库。