В настоящее время я использую это:
$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()
, мне нужно выяснить, находится ли время, хранящееся в переменной $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))
)
Это работает нормально, но если t.close
установлен в 23:30, он фактически не закрывается до 23:31. Есть ли способ взять минутку за захваченное время, чтобы разобраться с этим?
Временная метка, которую вы вставляете, должна указываться в виде строки, поэтому вам нужно
WHERE
(
UNIX_TIMESTAMP('$current_local_time') BETWEEN
UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open))
AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close))
)
Еще лучше использовать структуру SQL, которая позволяет выполнять привязку параметров, задавать запрос следующим образом и связывать ?
с $current_local_time
в PHP.
WHERE
(
UNIX_TIMESTAMP(?) BETWEEN
UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open))
AND UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close))
)
EDIT: Я думаю, что вы хотите
(UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.open)) <= '$timestamp2'
AND
'$timestamp2' < UNIX_TIMESTAMP(CONCAT(CURRENT_DATE(), ' ', t.close)))
-- ^^^ Note the less-than sign
Вероятно, вам больше не нужны кавычки вокруг $timestamp2
.
t.close
это 23:59).