PHP中的时间日期比较

时间:2012-12-05 09:41:01

标签: php datetime

我的数据库中有一个表将用户输入存储为开始日期和结束日期之后,我的用户必须选择一个时间范围,我必须在表中显示这些时间范围内的记录吗?

尝试了stritotime();和许多其他部分,但不知怎的,我无法得到正确的结果..

任何可能的解决方案都将受到赞赏。

谢谢!

3 个答案:

答案 0 :(得分:2)

可以与:

 SELECT count(*) FROM `table` 
 where 
 created_at>='2011-03-17 06:42:10' and created_at<='2011-03-17 06:42:50';

或使用之间:

  SELECT count(*) FROM `table` 
  where 
  created_at between '2011-03-17 06:42:10' and '2011-03-17 06:42:50';

这取决于你的记录你想要显示的内容,因为我没有看到你的桌子,例如你要做什么,所以只需改变计数(*)并得到你想要的记录。

编辑: 如果用户将选择一段时间,那么它们将是变量

然后就会有类似的东西

   SELECT records FROM `table` 
   where 
  created_at >= '".$var_start_time."' and ended_at <= '".$var_end_time."';

答案 1 :(得分:1)

你可以在mysql查询中使用BETWEEN ... AND ...比较运算符 http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

答案 2 :(得分:1)

您可以在SQL中执行此操作,这是推荐的方法。例如,如果将这些开始和结束时间存储在数据库表中作为本机DateTime类型,则可以使用DBMS的日期函数将范围选择为UNIX时间戳(如果这就是您想要的那样)。

SELECT UNIX_TIMESTAMP(`start_time`), UNIX_TIMESTAMP(`end_time`) FROM `table` WHERE `start_time` > INTERVAL -1 DAY AND `end_time` < NOW();

这是一个例子(假设您正在使用MySQL),您可以在其中选择表start_time列在过去24小时内的所有行,end_time列由当前服务器决定时间。

要获取格式化日期,然后在PHP中转换为UNIX时间戳,请使用:

SELECT `start_time`, `end_time` FROM `table` WHERE `start_time` > INTERVAL -1 DAY AND `end_time` < NOW();

然后在PHP中你可以这样做:

$result['start_time'] = strtotime($result['start_time']);
$result['end_time'] = strtotime($result['end_time']);

请注意,strtotime希望格式化日期符合PHP's date parsing rules found here

P.S:您正在寻找的PHP函数是strtotime而不是stritotime。