와 서버에서 클라이언트의 로컬 시간에이 같은 결과를 생성하는 쿼리가 또한 일반적인 'markers_name'요소는 함께 묶여 있습니다. (그들은 각 날짜에 대해서만 함께 덩어리로 처리됩니다). 변환 날짜와 시간을 UTC에서 MYSQL
은 그때 내가 본 쿼리에서 무엇입니까 행 세트에 그리스트에 가입,conditions
에서
(markers_id, date)
의 모든 조합에 대해
MAX(time)
값의 목록을 이렇게 및 정렬을 위해
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 데이터베이스에 저장됩니다. 클라이언트는 자바 스크립트를 사용하여 날짜와 시간을 현지 시간대로 변환합니다. 대신 나는 PHP와 MySQL로 서버에서 변환을하고 싶습니다. 누구든지 MySQL 쿼리 (또는 아마 PHP 및 MySQL)를 사용하여이 작업을 수행하는 방법에 대한 제안을 제공 할 수 있습니까?
클라이언트는 서버에서이 데이터를 요청하기 위해 ajax를 사용하므로 javascript 메소드 인 getTimezoneOffset()을 사용하여 쿼리에 시간대 오프셋을 쉽게 포함 할 수 있습니다.
날짜는 별도의 날짜와이 코드를 사용하여 시간 필드를 사용하여 데이터베이스에 저장됩니다 나는 $ 시간 $ 날짜 대신 $ utc_timestamp 저장할 수 필요한 경우
// 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 형식으로 저장된 데이터를 검색하고 클라이언트의 표준 시간대로 변환하는 데 어떻게 도움이되는지 이해할 수 없습니다. 좀 더 설명해 주시겠습니까? 데이터를 저장하는 방법을 변경해야합니까 (날짜와 시간 대신 타임 스탬프를 저장합니까?) 감사합니다. – user418775
@ user418775 타임 스탬프로 저장하는 것이 더 낫겠지 만, 'mktime ($ hour, $ minute, $ second, $ month, $ day, $ year, $ is_dst)와 같은 타임 스탬프로 날짜를 변환 할 수 있습니다. http://ktp.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