【发布时间】: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 涵盖了搜索。
【问题讨论】: