と、サーバー上のクライアントのローカル時間に私はこのような結果を生成するクエリを持っています共通の 'markers_name'要素も一緒にチャンクされます。 (彼らは、日付ごとに一緒にチャンクされています)。これを行うには変換日時UTCからMYSQL
私は、私は現在、クエリから取得していた行セットにそのリストに参加し、ソートにMAX(time)
値を使用し、conditions
に(markers_id, date)
の組み合わせごとMAX(time)
値のリストを取得する:
SELECT
m.name AS markers_name,
c.time AS conditions_time,
c.date AS conditions_date,
s.name AS station_name
FROM markers m
INNER JOIN conditions c ON c.markers_id = m.id
INNER JOIN station s ON c.station_id = s.id
INNER JOIN (
SELECT
markers_id,
date,
MAX(time) AS time
FROM conditions
GROUP BY
markers_id,
date
) mx ON c.markers_id = mx.markers_id AND c.date = mx.date
ORDER BY
c.date DESC,
mx.time DESC,
m.name DESC,
c.time DESC
日付と時刻は、UTC時刻としてMySQLデータベースに保存されます。クライアントは、javascriptを使用して日付と時刻を現地時間帯に変換します。 代わりに私はPHPとMySQLでサーバー上で変換を行いたいと思います。誰かが私はMySQLのクエリ(またはおそらくPHPとMySQL)でこれを達成する方法についての提案を提供することはできますか?
クライアントはこのデータをサーバーから要求するために、javascriptメソッドgetTimezoneOffset()を使用して、タイムゾーンオフセットをクエリに簡単に含めることができます。
日は、このコードを使用して別の日付と時刻のフィールドを使用してデータベースに格納されます。
// convert timestamp to seconds
// time is provided by client as the number of milliseconds since January 1, 1970 00:00:00 UTC.
$utc_timestamp = trim($_POST['utc_timestamp']);
date_default_timezone_set('UTC');
$utc_timestamp = $utc_timestamp/1000;
$time = date("H:i:s",$utc_timestamp);
$date = date("Y:m:d",$utc_timestamp);
必要であれば、私は$時間と$日付の代わりに$ UTC_TIMESTAMPを格納することができますが、それはに少し怖いです私のデータを保存している方法を変えてください。
事前に感謝しますが....
ありがとうございますが、私はかなりフォローしていません。私はクライアントのタイムゾーンに従ってデータを保存したければ、これがどのように役立つのか理解していると思います。しかし、これがどのようにしてUTC形式で保存されたデータを取得し、それをクライアントのタイムゾーンに変換するのに役立つのか分かりません。あなたはもう少し説明できますか?データを保存する方法を変更する必要がありますか(日付と時刻の代わりにタイムスタンプを保存しますか?)ありがとうございます。 – user418775
@ user418775これはタイムスタンプとして保存する方が良いでしょう。しかし、 'mktime($ hour、$ minute、$ second、$ month、$ day、$ year、$ is_dst)'のように日付をタイムスタンプに変換することはできます。詳細はこちらhttp://php.net/manual/en/function.mktime.php –
mktimeはうまくいくでしょう - 私はMySQLクエリによって返された行を繰り返してデータを再フォーマットする必要があります。しかし、合併症があります。 UTC時間とクライアントの現地時間を比較すると、特定のデータエントリが異なる日付に表示されます。たとえば「2 2011-12-31 17:11:49」、「1 2011-12-31 18:19:35」、「2 2012-01-01 03:46:12」などです。 (各文字列の最初の桁が場所です)これをESTに変換すると、1番目と3番目のエントリは両方とも12月31日に起こります。そのため、それらをグループ化する必要がありますが、MySQLクエリはUTC時間に基づいているため、それらをまとめてグループ化しません。 – user418775