PHP中的日期范围?

时间:2009-03-09 18:54:19

标签: php sql datetime

我有一个由第三方供应商创建的数据库,我正在为其编写新的用户界面。

DB将事件开始时间存储为unix时间戳(以GMT为单位)。我需要做的是查询一天的范围。所以我想我只需要做一个:

SELECT * WHERE start > $last_night_at_midnight AND start < $tonight_at_midnight

我遇到的问题是在PHP中组合日期/时间函数以创建这些变量的简单方法。感觉就像我正在做的一切对于这么简单的程序来说太复杂了。

有没有人有这个简单的解决方案?

干杯

7 个答案:

答案 0 :(得分:6)

查看PHP的strtotime()以获取简单英语以进行unix时间转换。

这可以让你使用“今天午夜”和“明天的午夜”以及其他类似的结构,正如Paolo Bergantino所展示的那样。

答案 1 :(得分:5)

strtotime - 史上最棒的PHP时间函数。

$last_night_at_midnight = strtotime("today midnight");
$tonight_at_midnight = strtotime("tomorrow midnight");

答案 2 :(得分:4)

这是一种非常倒退的方式,但是如果您需要能够执行各种日期范围,而不仅仅是今天或一天,您可以结合两种语言的奇数时间/日期功能并继续: / p>

$php_start = strtotime("Some valid date expression");
$php_end = strtotime("Some other valid date expression");

$result = my_sql_query("
          Select * FROM someDB 
          WHERE DATE(FROM_UNIXTIME(date_column)) 
          BETWEEN FROM_UNIXTIME($php_start) AND FROM_UNIXTIME($php_end)");

在查询中使用DATE()确保sql不会费心查看数据的时间部分,并且对所有这三个使用FROM_UNIXTIME意味着sql server在如何获取日期方面是一致的。

我最喜欢的日期范围是:

  $today_start = strtotime("today");
  $today_end = strtotime("+1 day", $today_start);

strtotime实际上更好,我发现,然后添加86400或类似的东西,因为strtotime更好地处理DST。上周发现了。

答案 3 :(得分:3)

strtotime在这里很有用......

$t1=strtotime("today");
$t2=strtotime("tomorrow");

$sql="select * from foo where timecol between $t1 and $t2";

在撰写本文时(09-03-2009 19:06),今天相当于09-03-2009 00:00:00,明天相当于10-03-2009 00:00:00

答案 4 :(得分:1)

如果您需要选择任意日期,请使用gmmktime

答案 5 :(得分:0)

PHP中的time()函数可能在这里使用:http://be2.php.net/manual/en/function.time.php

更具体地说,该页面上给出的示例可能会告诉您需要了解的内容。看看第3个echo语句

答案 6 :(得分:-1)

您可以在PHP或Mysql中创建这些变量......

$tonight_at_midnight    = mktime(0,0,0);
$last_night_at_midnight = $tonight_at_mindnight - 86400; 

另一种可能性是在SQL中:


SELECT * FROM tbl1 WHERE start > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
AND start < UNIX_TIMESTAMP(CURDATE())

(未经测试)