Использование преобразованной метки времени Unix для запроса базы данных

0

В настоящее время я использую это:

$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. Есть ли способ взять минутку за захваченное время, чтобы разобраться с этим?

  • 1
    Какие сообщения об ошибках вы получаете?
  • 0
    Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, логическое значение указано в E: \ wamp \ www \ app \ webroot \ erc \ index.php в строке 185 Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, логическое значение указано в E : \ wamp \ www \ app \ webroot \ erc \ index.php в строке 197
Теги:
timestamp

1 ответ

0
Лучший ответ

Временная метка, которую вы вставляете, должна указываться в виде строки, поэтому вам нужно

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.

  • 0
    Привет, Кен, я добавил одинарные кавычки вокруг имени переменной, но запрос не возвращает никаких результатов. $ Current_local_time в настоящее время установлено в 22:50 (время Вьетнама), и часы работы, которые я установил сегодня вечером в 23:59, поэтому он должен отображаться как открытый, если возвращается результат. Есть ли что-то еще, что мне нужно изменить? Спасибо за вашу помощь
  • 0
    22:50 до 23:59, поэтому не в часы работы. (Если вы не имели в виду, что t.close это 23:59).
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню