Php MySQL-存储时间和与日期的比较

Php MySQL-存储时间和与日期的比较,php,mysql,database-design,Php,Mysql,Database Design,我正在访问一个包含列车时刻表的API,它返回到达时间。到达时间为24小时格式,即15:24:56 我可以将它们存储为MySQLTIME类型,也可以将它们存储为秒数的整数(从午夜开始的秒数) 然而,我遇到了一个问题:当我访问这些数据时,我想将下一次列车的时间与当前时间进行比较。所以我们说当前日期/时间是2016-02-14 23:52:30。由于时间接近午夜,它无法识别01:20:30晚于当前时间 我如何处理这种情况?我的第一个想法是从数据库中提取所有可能的到达时间值,并在我的代码(PHP)中创建

我正在访问一个包含列车时刻表的API,它返回
到达时间
。到达时间为24小时格式,即
15:24:56

我可以将它们存储为MySQL
TIME
类型,也可以将它们存储为秒数的整数(从午夜开始的秒数)

然而,我遇到了一个问题:当我访问这些数据时,我想将下一次列车的时间与当前时间进行比较。所以我们说当前日期/时间是
2016-02-14 23:52:30
。由于时间接近午夜,它无法识别
01:20:30
晚于当前时间

我如何处理这种情况?我的第一个想法是从数据库中提取所有可能的
到达时间
值,并在我的代码(PHP)中创建
日期时间
对象,将这些时间放在今天的日期中。然后,如果我发现“即将到来的时刻”的数量少于X,则取相同的时间集,并在其中添加一天,然后继续


有没有更好的办法

以下是一种拉动“下一个”列车时间的方法:

select s.*
from schedules s
order by arrival_time > curtime() desc,
         arrival_time
limit 1;
计算(晚一点)-(早一点)。然后,如果你得到一个负数,加上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                |
+-------------------------+
mysql>选择@previous:=TIME-TO-SEC('23:52:30'),@later:=TIME-TO-SEC('01:20:30');
+-------------------------------------+-----------------------------------+
|@previous:=时间到秒('23:52:30')|@later:=时间到秒('01:20:30'))|
+-------------------------------------+-----------------------------------+
|                               85950 |                              4830 |
+-------------------------------------+-----------------------------------+
mysql>选择@diff:=@later-@previous;
+----------------------------+
|@diff:=@以后-@以前|
+----------------------------+
|                     -81120 |
+----------------------------+
mysql>选择@real_diff:=IF(@diff<0,@diff+86400,@diff);
+---------------------------------------------------+
|@real_diff:=IF(@diff<0,@diff+86400,@diff)|
+---------------------------------------------------+
|                                              5280 |
+---------------------------------------------------+
mysql>选择秒到秒时间(@real\u diff);
+-------------------------+
|秒到秒时间(@real\u diff)|
+-------------------------+
| 01:28:00                |
+-------------------------+

(当然,这可以/应该缩短,以便在代码中使用。)

@dtj。对这就是这个查询的作用。啊,我现在明白了。非常简洁。谢谢