PHP和mysql得到最近的时间今天


PHP and mysql getting the nearest time of today

我正在使用time() (php函数)存储日期列。我的日期列有一个int数据类型,因为我使用time() php函数。

这是一个示例:

date
1317957366
1318043891

我的问题是,我如何查询或创建一个逻辑,将得到一个结果谁的时间是最接近今天的时间?

我想通过mysql查询,而不是php逻辑,但如果你有建议,我应该在php上做,那么这也会很好。

谢谢你的帮助,我将非常感激和回报。:)

比较当前时间与存储时间的绝对值,并选择其中的MIN():

也许是这样的?

SELECT *
FROM tbl
GROUP BY `date`
HAVING MIN(ABS(UNIX_TIMESTAMP(NOW()) - `date`));

如果不能正常工作,尝试使用子查询:

SELECT *
FROM tbl
WHERE  ABS(UNIX_TIMESTAMP(NOW()) - `date`) IN
  SELECT (MIN(ABS(UNIX_TIMESTAMP(NOW()) - `date`)) FROM tbl);

由于您已经将日期存储为INT而不是MySQL DATETIME,您需要将当前时间戳NOW()转换为Unix时间戳,然后减去存储的date

您应该将日期/时间转换为UNIX时间戳,并将其存储在mysql中的datetime类型中。为什么?因此,您可以使用mysql的各种函数,如year(), month()等。

http://www.richardlord.net/blog/dates-in-php-and-mysql

你就不能

SELECT * FROM `tbl` ORDER BY ABS(UNIX_TIMESTAMP(NOW()) - `date`) LIMIT 0,1

?

你也可以试着用mysql变量找到距离最小的行:

SET @min = 1000000000000, @minid = 0;
SELECT 
  @minid := IF(@min > ABS(UNIX_TIMESTAMP(NOW()) - `date`), id, @minid), 
  @min := IF(@min > ABS(UNIX_TIMESTAMP(NOW()) - `date`), ABS(UNIX_TIMESTAMP(NOW()) - `date`), @min) 
FROM 
  `tbl` ;
SELECT * FROM `tbl` WHERE id = @minid;

你也可以在PHP中计算UNIX_TIMESTAMP(NOW())的值(time()给出它)并在你的查询中使用它