2009-12-05 5 views
8

내 사이트에서 사용자 로그인에 날짜를 저장하려고 생각하고 있지만 가장 논리적 인 솔루션이 무엇인지 알지 못합니다.MySQL : 서버 시간대 또는 사용자 시간대를 유지 하시겠습니까?

처음에는 서버 시간대를 사용하고 서버 컴퓨터 날짜와 사용자 컴퓨터 날짜 간의 차이 작업을 사용하여 관리하지만 시간대 및 PHP 클래스 날짜를 사용하여 direclty로 변경했습니다.

<?php 
// my server has for example America/New_York timezone 
$user_timezone = "Europe/Rome"; 
date_default_timezone_set ($user_timezone); 
$date = date ('Y-m-d H:i:s'); 
$sql = "UPDATE users SET user_last_modify = '$date', user_timezone = '$user_timezone' WHERE user_id = 'some id' LIMIT 1;"; 
$res = mysql_query ($sql); 
?> 

가장 좋은 해결책은 무엇입니까? 서버 시간대를 유지 하시겠습니까? 아니면 사용자 시간대를 사용 하시겠습니까?
사용자 시간대를 사용하는 경우 내 예제처럼 표준 시간대 이름도 저장해야합니까?

답변

14

각 사용자마다 다른 데이터를 저장하는 대신 서버 시간대 또는 UTC를 사용하는 것이 좋습니다. 이렇게하면 데이터베이스가 완전히 일관되고 각 항목에 대해 user_timezone 열을 가져 와서 변환을 수행 할 필요없이 비교와 같은 일부 작업을 수행 할 수 있습니다 (완전히 무료는 아닙니다)

+1

UTC는 대부분의 작업을 단순화 할 수 있습니다. 특히 DST 스위치 –

+4

+1이지만 서버 시간대를 기준으로 한 UTC의 경우에도 마찬가지입니다. 나중에 서버를 이동하거나 전 세계에 여러 대의 서버를 갖고 싶다면 어떻게해야합니까? –

+0

도움을 많이 주셔서 감사합니다. 또한 불만 스러움을 가진 UTC 테이블에 대해 알고 계십니까? -1100, -1200, -1300 등. – vitto

2

UTC을 사용하십시오. 그것은 많은 좌절감을 줄 것입니다.

사용자 로컬 시간은 프리젠 테이션의 문제입니다. 데이터베이스에서 각 레코드의 날짜 필드의 TZ를 추적하는 것보다 주어진 사용자의 로컬 시간으로 변환하는 것이 훨씬 쉽습니다.

라도 유혹 할 수있다 서버의 시간대를 사용하는 경우, DST 규칙 (참조 : Argentina DST 2009를 - 정부가 appx, DST를 사용하지 않기로 결정했다가 일어날했는데 일주 전에.) 매우 짧은 시간에 변경 될 수 있습니다

; 일부 경우 시간대 자체가 변경 될 수 있습니다 (Time in Indiana 참조). UTC의 정의는 그러한 과감한 변화를 겪을 것 같지 않습니다.

(미국 서부 해안에 서버를 설치하여 미국 동부 해안으로 옮겼습니다. 앱이 서버 시간을 사용하여 모든 지옥이 풀 렸습니다. 가상화를 사용하면 쉽고 빠르게 이동할 수 있습니다. 서버가 대륙입니다.

관련 문제