我正在访问具有列车时刻表的API,该时间表返回arrival_time
。到达时间为24小时格式,即15:24:56
。
我可以将它们存储为MySQL TIME
类型,或者我可以在几秒钟内(从午夜起几秒钟)将它们存储为整数。
但是,我遇到了一个问题:当我访问这些数据时,我想拉下下一班列车时间与当前时间相比。所以我们说当前的日期/时间是2016-02-14 23:52:30
。由于它接近午夜,它不会将01:20:30
识别为晚于当前时间。
我该如何处理这种情况?我的第一个想法是从数据库中提取所有可能的Arrival Time
值,并在我的代码(PHP)中创建DateTime
个对象,将这些时间放在今天的日期中。然后,如果我达到“即将到来的时间”少于X量的点,请采取相同的一组时间并向他们添加一天并继续。
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
这是拉动“下一次”列车时间的一种方法:
select s.*
from schedules s
order by arrival_time > curtime() desc,
arrival_time
limit 1;
答案 1 :(得分:0)
计算(以后的时间) - (早些时候)。然后,如果您得到负数,请添加24小时。
mysql> SELECT @earlier := TIME_TO_SEC('23:52:30'), @later := TIME_TO_SEC('01:20:30');
+-------------------------------------+-----------------------------------+
| @earlier := TIME_TO_SEC('23:52:30') | @later := TIME_TO_SEC('01:20:30') |
+-------------------------------------+-----------------------------------+
| 85950 | 4830 |
+-------------------------------------+-----------------------------------+
mysql> SELECT @diff := @later - @earlier;
+----------------------------+
| @diff := @later - @earlier |
+----------------------------+
| -81120 |
+----------------------------+
mysql> SELECT @real_diff := IF(@diff < 0, @diff + 86400, @diff);
+---------------------------------------------------+
| @real_diff := IF(@diff < 0, @diff + 86400, @diff) |
+---------------------------------------------------+
| 5280 |
+---------------------------------------------------+
mysql> SELECT SEC_TO_TIME(@real_diff);
+-------------------------+
| SEC_TO_TIME(@real_diff) |
+-------------------------+
| 01:28:00 |
+-------------------------+
(当然,这可以/应该缩短以便在您的代码中使用。)