2

を使用して昨日のmySQLデータを正常にフェッチしています

SELECT COUNT(*) as total FROM  track
WHERE  FROM_UNIXTIME(date,'%Y-%m-%d %h:%m:%s') > DATE_ADD(NOW(), INTERVAL -2 DAY) 
AND FROM_UNIXTIME(date,'%Y-%m-%d %h:%m:%s') < DATE_ADD(NOW(), INTERVAL -1 DAY)

ただし、サーバーのタイムゾーンを使用します。私のサーバーは米国にあります。訪問者が米国とは異なるタイムゾーン (アジアやヨーロッパなど) から来ている場合、昨日のデータはユーザーにとって正しくありません。訪問者のタイムゾーンに基づいて、昨日の正しい結果を取得したいと考えています。PHP で訪問者のタイムゾーンを取得できますが、mySQL でそれを使用する方法がわかりません。

4

1 に答える 1

5

時刻を UNIX タイムスタンプではなく、TIMESTAMP. 次に、設定するだけtime_zoneで、すべてが必要に応じて変換されます。

SET time_zone = '+10:00';

SELECT COUNT(*) AS total
FROM   track
WHERE  date > NOW() - INTERVAL 2 DAY
   AND date < NOW() - INTERVAL 1 DAY

それ以外の場合は、次を使用できますCONVERT_TZ()

SELECT COUNT(*) AS total
FROM   track
WHERE  date > UNIX_TIMESTAMP(CONVERT_TZ(NOW() - INTERVAL 2 DAY, '+3:00', '+10:00'))
   AND date < UNIX_TIMESTAMP(CONVERT_TZ(NOW() - INTERVAL 1 DAY, '+3:00', '+10:00'))
于 2013-04-04T22:51:17.073 に答える