将时间戳与php中的日期进行比较

时间:2012-09-26 15:07:54

标签: php

我有这个代码,它允许我检索有关该信息的时间戳等于另一个日期的所有信息。

以下是代码:

$information="SELECT * FROM scheda_anagrafica WHERE FROM_UNIXTIME('time_inserted','%d-%m-%Y') = '" . $giorno_selcted. "'
 "; 
$result1 = mysql_query($information) or die (mysql_error());
while( $row = mysql_fetch_array($result1)) {

    echo $row['information1'];

}

giorno_selected打印的内容如下:25-09-2012 我在这做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

首先,你不应该在where子句中使用运算符左侧的mysql函数。这样mysql需要读取磁盘上的完整表来计算要比较的值,而不是优化查询速度和资源使用情况(IO,cpu)。

从您的问题和评论我明白,您正在查询数据库中与$giorno_selected表示的字符串相同的行。因此,您需要在该特定日期找到时间戳介于0:00到23:59之间的所有行:

$giorno_timestamp_start = date_create_from_format('d-m-Y', $giorno_selected)->getTimestamp();
$giorno_timestamp_end = $giorno_timestamp_start + 86399; //add almost all seconds per day onto the start timestamp

$information="SELECT * FROM scheda_anagrafica WHERE time_inserted BETWEEN " . $giorno_timestamp_start. " AND ". $giorno_timestamp_end; 
$result1 = mysql_query($information) or die (mysql_error());
while( $row = mysql_fetch_array($result1)) {

    echo $row['information1'];

}

如果您的time_inserted列的类型为integer并且包含unix_timestampds,则此方法有效。 如果类型为datetimetimestamp,则需要修改查询,如下所示:

$information="SELECT * FROM scheda_anagrafica WHERE time_inserted BETWEEN FROM_UNIXTIME(" . $giorno_timestamp_start. ") AND FROM_UNIXTIME(". $giorno_timestamp_end .")";