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が 2 つのデータベース値の間にあるかどうかを確認する必要があります。時刻表の時刻は、ロンドンの時刻ではなく現地の時刻で保存する必要があるため、変換しようとしています。

を交換してみました

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.close23:30 に設定されている場合、実際には 23:31 までシャットダウンしません。これを整理するために、キャプチャされた時間を 1 分ずらす方法はありますか?

4

1 に答える 1

0

挿入するタイムスタンプは文字列として引用する必要があるため、

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、PHPでにバインドできるSQLフレームワークを使用することをお勧めします。

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もう引用符は必要ありません。

于 2011-04-12T14:34:21.840 に答える