0

我有一个将日期存储为 Unix 时间戳的数据库(即 1369763646)

要获取特定日期的数据,我必须首先检索数组中的所有数据,然后使用 PHP 日期函数循环以分隔特定日期结果。

$today = date("Y-m-d");
$collect = array();
foreach($data as $row)
{
    $date = date("Y-m-d",$row['date']);
     if($date == $today)
      $collect[] = $row;
}

有没有办法只从时间戳中检索特定日期的数据,而无需使用单个查询将所有数据放入数组中,例如..

SELECT * FROM table WHERE date = '28-05-2013';
4

4 回答 4

2

在您的查询中使用FROM_UNIXTIME和:DATE

SELECT * FROM table WHERE DATE(FROM_UNIXTIME(date)) = '2013-05-28';
于 2013-05-28T18:57:29.187 回答
1

from_unixtime()在您的查询中使用:

SELECT * 
FROM table 
WHERE SUBSTRING_INDEX(FROM_UNIXTIME(date), ' ', 1) = '28-05-2013'

这会将您的日期字段从时间戳转换为日期格式 (28-05-2013 22:13:02)。SUBSTRING_INDEX()然后将检索日期字段的第一部分(28-05-2013),您可以在下一部分使用标准 WHERE 子句:)

于 2013-05-28T18:56:49.357 回答
0

虽然这不是你要问的,但你可以做一个

$timestamp = mktime(0,0,0,5,28,2013);

获取您想要的日期作为时间戳并使用该日期运行查询

于 2013-05-28T18:55:51.133 回答
0

尝试这个?

$start = strtotime( '2013-05-28 00:00:00' );
$end   = strtotiem( '2013-05-28 23:59:59' );
$sql = "SELECT * FROM table WHERE date BETWEEN {$start} and {$end}";

from_unixtime可能会更好,但这会将时间戳计算留给 PHP,我倾向于使用 PHP,因为这会减慢您的查询速度

于 2013-05-28T18:57:41.753 回答