Php 如何从一列时间值中,将它们与当前时间进行比较,并获得当前时间后最接近的值?

Php 如何从一列时间值中,将它们与当前时间进行比较,并获得当前时间后最接近的值?,php,mysql,time,Php,Mysql,Time,假设您在MySQL数据库的列中有一个时间值列表 Time ----- 10:15 AM 10:35 AM 10:55 AM 说现在是上午10点27分。在PHP中,如何特别在变量中获取10:35 AM值 我知道我可以用它来获取当前时间 $currenttime = time(); 然后使用 $some_time = strtotime($row['time']); 但是,如何将最接近的值放入$some_时间变量中?尝试获取当前时间和可能时间之间差值的绝对值。无论哪个值最小,都是最接近的。从那

假设您在MySQL数据库的列中有一个时间值列表

Time
-----
10:15 AM
10:35 AM
10:55 AM
说现在是上午10点27分。在PHP中,如何特别在变量中获取10:35 AM值

我知道我可以用它来获取当前时间

$currenttime = time();
然后使用

$some_time = strtotime($row['time']);

但是,如何将最接近的值放入$some_时间变量中?

尝试获取当前时间和可能时间之间差值的绝对值。无论哪个值最小,都是最接近的。从那以后,你唯一需要担心的是,如果一个给定的时间相当于你可以用任何方式处理的两倍,那么我认为在这一点上进行汇总是最合理的

问候,,
Dennis M.

您需要记录时间和参考时间之间具有最小增量的行,其中记录时间大于参考时间

SELECT * FROM SomeTable AS T
 WHERE T.Time = (SELECT MIN(T2.Time) FROM SomeTable AS T2
                  WHERE T2.Time > ?)

“?”是您的参考时间的占位符。

您可以使用TIMESTAMPDIFF从查询中获取最接近的时间:

SELECT * FROM SomeTable AS T
 WHERE T.Time = (SELECT MIN(T2.Time) FROM SomeTable AS T2
                  WHERE T2.Time > ?)
如果只想选择一个最接近时间的牵引:

SELECT
  time, TIMESTAMPDIFF(MINUTE, time, NOW()) AS minutes
ORDER BY
  minutes, time DESC
LIMIT 1

绝对时间有时会选择当前时间或参考时间之前的时间。你需要确保时间在参考时间之后,然后一个简单的最小值就足够了?你能把你的代码和我的$variable设置混在一起,让我更能理解你的意思吗?@Dan:我想你的表有一个名字吧?您没有告诉我们您的表被称为SQL相关问题中的一个非常常见的错误,所以我不得不为它命名;我选择“SomeTable”表示它是数据库中某个表的名称。我假设列名是“Time”。如果愿意,可以用$currenttime变量替换我的问号占位符;你得担心相关的引用惯例。如果您可以使用带有占位符的预处理语句,那么在执行查询时传递值就更简单了。是的,很抱歉没有具体说明,现在已经晚了,所以如果我想传递$currenttime变量而不是问号,我就这样做$当前时间。或者,这只会给出当前时间之后最接近的一个值,对吗?不是一个完整的列表吗?@Dan:大致如下:$sql=SELECT*fromsometable AS T1,其中T1.Time=SELECT MINT2.Time fromsometable,其中T2.Time>“$currenttime”;,但您需要担心列中数据的数据类型和格式以及$currenttime中的值。