如何使用Mysql时间戳创建日期范围查询?

时间:2014-01-22 01:02:37

标签: php mysql sql timestamp

在这里需要一些帮助我希望你可以帮我解决我的简单问题。

我有一张包含商店数据的表格。在我的PHP页面中,用户可以注册他们的商店。 在注册时,用户注册他/她的帐户的那一天将保存在数据库表中,并格式化为 TIMESTAMP

我没有问题。在我的后端页面中有一个预先搜索方法的表单。在我的表单中,有一个下拉字段,旁边有一个 datepicker ,格式为 mm / dd / yyyy 所以我有一个2个日期选择器,用于

我的问题是:

我使用PHP中的 strtotime()函数格式化了datepicker结果。我有这样的查询。

$query = "SELECT * FROM shops
          WHERE status = '".$status."'
          AND registered BETWEEN ('".$from." AND ".$to."')";

查询的示例输出为:

 SELECT * FROM shops WHERE status = 'P' AND registered BETWEEN ('1388505600' AND '1391097600');

现在我有$ from和$ to的时间戳结果。如何在mysql中过滤它?

好的就是这样。提前谢谢。

4 个答案:

答案 0 :(得分:3)

您实际上应该在PHP中格式化正确的YYYY-MM-DD字符串格式。

基本上很少有理由在MySQL中使用UNIX时间戳。

为每个日期选择器执行类似这样的操作:

$to_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_to);
$to = $to_datetime->format('Y-m-d');
$from_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_from);
$from = $from_datetime->format('Y-m-d');

然后在查询中使用它们:

$query = "SELECT * FROM shops
          WHERE status = '".$status."'
          AND registered BETWEEN ('".$from."' AND '".$to."')";

请注意,我已经使用了PHP DateTime类,我强烈建议您在PHP中使用日期操作工具(以及它的相关类,如DateIntervalDatePeriodDateTimeZone等等。)

答案 1 :(得分:1)

您需要删除时间戳周围的引号,如果列registered不在UNIX时间内,则需要使用FROM_UNIXTIME()。

答案 2 :(得分:1)

我认为您需要使用FROM_UNIXTIME

$query = "SELECT * FROM shops WHERE status = '".$status."' AND registered BETWEEN FROM_UNIXTIME(".$from.") AND FROM_UNIXTIME(".$to.")";

答案 3 :(得分:1)

<强> PHP

// $t is the value you got from strtotime()
$FormattedDateTime = date('Y-m-d H:i:s', $t)