未获取特定日期的所有数据

时间:2014-07-07 16:24:27

标签: php sql date

我正在撰写一份旅行历史报告,要求我获取上一日期的所有报告。为了测试,我一直在使用JQuery日期选择器来选择上一个日期和当前日期。

我遇到的问题是当我从该特定日期查询点火开关+关闭报告时,出于某种原因,存在+3小时的时差,因此我的查询没有从中获取所有数据一天。

下面是我用来填充数组并比较结果的循环。

while($row = mysql_fetch_array($result)){
        //$time[$s] = mysql_result($result,$s);
        if($row['Msg'] == 'Ignition Off' && $prev_time!=0){
            //echo "<br>". strftime('%I:%M %p', $row['Date'])."-". strftime('%I:%M %p', $prev_time)."=".($row['Date']-$prev_time)."<br>";
            $d_time+=$row['Date']-$prev_time;
        }

    $prev_time=$row['Date'];
    }

    $d_time=$d_time/3600;

第一个结果:11:41 PM-11:04 PM=2207(difference in epoch) 我们网站上的点火时间为8:04,同一报告点火时间为8:41

但是因为有3个小时的差异,我的循环在晚上11:59之后停止,因为那将是第二天并忘记其他数据,因为它不再是前一天。

任何建议(如果理解我刚才所说的)都将不胜感激。

以下是查询:

$queryt = "SELECT  `D_ID` ,  `Msg` ,  `Date` FROM  `211590` WHERE  (`Msg` =  'Ignition On' OR  `Msg` =  'Ignition Off') AND ( `Date` BETWEEN $prev_day AND $cur_day) ORDER BY `D_ID` ASC  LIMIT 100 ";

1 个答案:

答案 0 :(得分:1)

您似乎表示2个问题:不同的本地时间与服务器时间以及gps跟踪应用程序建立开/关的经典问题。

首先,请记住你有3个不同的时区:

  1. 在您的gps跟踪器上注册的时区(如果使用特定硬件而非手机)
  2. 服务器位置/服务器配置的时区(sql时间)
  3. 观察员当地时区
  4. 既然你说了3个小时,我猜你是在巴西/布宜诺斯艾利斯时区(-3 gmt)当地经营吗?请记住,您的浏览器将指示您当地的时间,而您的服务器可能正在使用GMT。

    关于点火开关时间,请记住您可以在晚上11点开启车辆,在凌晨1点关闭。在我的系统中,我使用根据观察者当地时间或国际跟踪软件计算的FIRST IGNITION ON和LAST IGNIITION OFF事件,在(可选)车辆所在的当地时间。

    我还将它们保存为事件(脉冲/心跳,警报,点火,开门,电池电量低等等)Id_event以及一个名为Events(Id_Event,Ds_Event)的附加表。

    我有一张表基本上是Id_Tracker,Id_Event,Datestamp,Lat(可选),Lng(可选 - 许多事件发生在地下,隧道,车库中位置数据不可用)

    编辑: 你还应该在unixtime(GMT)中保存你的日期戳,没有时区。然后在你的select语句中使用unixtime(GMT)并使用你想要应用的任何本地时区进行调整(你的“day”什么时候开始?est?edt?cst?gmt?)