我有一个由第三方供应商创建的数据库,我正在为其编写新的用户界面。
DB将事件开始时间存储为unix时间戳(以GMT为单位)。我需要做的是查询一天的范围。所以我想我只需要做一个:
SELECT * WHERE start > $last_night_at_midnight AND start < $tonight_at_midnight
我遇到的问题是在PHP中组合日期/时间函数以创建这些变量的简单方法。感觉就像我正在做的一切对于这么简单的程序来说太复杂了。
有没有人有这个简单的解决方案?
干杯
答案 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())
(未经测试)