2016-09-09 2 views
0

이것은 내 두뇌를 심각하게 손상시키고 있으며, 내 질문이 무엇인지 캡슐화하는 제목을 제시 할 수 없다.시간대 및 저장된 타임 스탬프

그래서 시간이 걸리는 페이지를 로깅하고 데이터베이스에 저장합니다. 이제이 페이지는 호주/시드니 및 호주/브리즈번의 여러 국가에서 사용할 수 있습니다. 시간대를 설정하고 적절한 시간을 출력 할 수 있습니다.

그러나 이것이 내가 혼란스러워하는 곳입니다. 타임 스탬프는 브리즈번이나 시드니에 상관없이 타임 스탬프입니다. 맞습니까? 또한 시간대를 설정하여 동일한 타임 스탬프를 사용하여 타임 스탬프가 브리즈번이나 시드니에서 실제로 생성 된 시간을 표시 할 수 있습니다.

시드니는 항상 일광 절약 시간제가 아니므로 저장된 시간 기록을 읽으면 변환 된 시간이 잘못됩니까? 내가 여기 잘못된 나무를 짖고 내 논리가 실패 했나요? 나는 타임 스탬프를 다르게 저장하려고 했는가?

+0

이 항목을 쉽게 테스트 할 수 있습니다. – Strawberry

+2

GMT 또는 UTC로 시간 소인을 저장하고 시간대 오프셋이있는 다른 필드가 있으면 어떨까요? – verhie

답변

1

time() 함수는 항상 시간대와 무관 한 시간 스탬프 (UTC)를 반환합니다. 시간대는 PHP에서 날짜 객체를 만들 때에 만 작용합니다. PHP는 시간대 타임 스탬프에 php.ini 파일에 설정되어있는대로 적용 및 시간대에 해당하는 날짜로한다 : 또는

$date = new DateTime(); 
$date->setTimestamp(1171502725); // We just made a date in php.ini's timezone based on a UTC timestamp 

, 당신은 시간대가 당신이 날짜를 원하는 PHP를 말할 수 있으며에서 어떤의 우선합니다 php.ini 파일 :

$date->setTimezone(new DateTimeZone('Australia/Sydney')); 

PHP 날짜 객체를 만들고, 내부적으로는 단순히 시간대 오프셋 추가 (또는 감산).

+0

그게 내가 시드니 나 브리즈번에 시간대를 설정할 수있는 이유를 설명해 주며 'time()'은 나에게 같은 스탬프를줍니다. 그래서 나는 시간대를 설정하고 'date()'라는 문자열을 사용하여 db에 저장해야한다고 말하면됩니까? – Ash

+0

아니요, 모든 것을 UTC로 데이터베이스에 저장하십시오. 그렇지 않으면 특히 DATE 또는 DATETIME과 같은 db 열을 사용하는 경우 시간이 많이 걸릴 것입니다. PHP에서 사용자에게 표시 할 시간대를 알아낼 수있게하려면 데이터베이스에 사용자의 계정에 대한 표준 시간대 문자열을 저장하는 것이 가장 좋습니다. 이 문자열을 사용하여 해당 시간대에서 해당 사용자의 날짜를 표시 할 수 있습니다. –

+0

좋아요, 이것은 정확하게 저를 혼란스럽게하는 비트입니다. 그래서 나는 타임 스탬프를주고 db에 저장하기 위해 time()을 사용합니다. 바로이 순간 시드니와 브리즈번 시대에는 차이가 없습니다. 그래서 나는 시드니에서 시간을 보도록 사용자의 시간을 정했고, 저장된 타임 스탬프를 취해서 로그가 맞을 것입니다. 그러나 지금부터 트랙은 시드니가 한시간 앞으로 점프합니다. 동일한 저장된 타임 스탬프를 사용하면 표시됩니다. 한시간? 레코드와 함께 오프 타임을 저장하는 verhie의 아이디어가 필요한 곳입니까? – Ash

관련 문제