使用转换的Unix时间戳来查询数据库

时间:2011-04-12 14:24:16

标签: php mysql unix timestamp timetable

我目前正在使用这个:

$rawsql = "SELECT 
*
FROM 
    _erc_foffices n 
INNER JOIN 
    _erc_openings o ON n.id = o.branch_id AND o.dotw = DAYOFWEEK(CURRENT_DATE()) 
INNER JOIN 
    _erc_openings_times t ON o.id = t.opening_id
WHERE 
(
    UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) BETWEEN 
        UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open))
    AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
) 
AND 
(
    n.id = %d
)
    ;";

查询数据库,如果当前打开,则从大使馆返回所有详细信息。

现在,我需要找出存储在变量CURRENT_TIMESTAMP()中的时间是否在2个数据库值之间,而不是$current_local_time。时间表时间需要存储在当地时间而不是伦敦时代,这就是为什么我要尝试转换它们。

我尝试过更换

WHERE 
    (
        UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) BETWEEN
            UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open))
        AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 

WHERE 
    (
        UNIX_TIMESTAMP($current_local_time) BETWEEN 
            UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
        AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 

但我只收到错误消息。请问有人可以告诉我如何正确地做到这一点?

感谢您的帮助

编辑:$current_local_time变量如下所示:

date_default_timezone_set('Europe/London');
$time = date("H:i", time());
$myDateTime = new DateTime($time, new DateTimeZone('GMT'));
$myDateTime->setTimezone(new DateTimeZone($timezone));
$current_local_time = $myDateTime->format('H:i:s');

并输出与其他国家当前时间相同的信息。

编辑2:

我已将$ current_local_time更改为:

$current_local_time = $myDateTime->format('H:i:s');
$timestamp2 = strtotime($current_local_time);

和where子句:

WHERE 
(
    '$timestamp2' BETWEEN 
        UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
    AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
) 

这样可行,但如果{23}设置t.close,它将在23:31之前实际关闭。有没有办法从捕获的时间中抽出一分钟来解决这个问题?

1 个答案:

答案 0 :(得分:0)

您要插入的时间戳需要作为字符串引用,因此您需要

WHERE 
    (
        UNIX_TIMESTAMP('$current_local_time') BETWEEN 
            UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
        AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 

最好使用允许您进行参数绑定的SQL框架,按如下方式指定查询,并在PHP中将?绑定到$current_local_time

WHERE 
    (
        UNIX_TIMESTAMP(?) BETWEEN 
            UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) 
        AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)) 
    ) 
编辑:我想你想要

(UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open))     <=   '$timestamp2'
AND
'$timestamp2'    <    UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)))
--              ^^^ Note the less-than sign

您可能不再需要$timestamp2周围的引号。