我目前正在使用这个:
$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之前实际关闭。有没有办法从捕获的时间中抽出一分钟来解决这个问题?
答案 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
周围的引号。