我正在撰写一份旅行历史报告,要求我获取上一日期的所有报告。为了测试,我一直在使用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 ";
答案 0 :(得分:1)
您似乎表示2个问题:不同的本地时间与服务器时间以及gps跟踪应用程序建立开/关的经典问题。
首先,请记住你有3个不同的时区:
既然你说了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?)