2012-08-28 2 views
3

나는 날짜 시간 카운트 다운 및 만료

'Y-m-d H:i:s' 

같은 예에서 내가 MySQL의에서 이러한 저장 만료 날짜가 내 사이트에 게시물이 있습니다. 2012년 8월 28일 0시 0분 0초

내가 형식이 날짜로 변환 아래에있는이 JQuery와 카운트 다운

$offset.', Y, n - 1, j, H, i, s' 

이 부분은가 예상대로 작동 전달됩니다.

내가하려는 것은 현재 시간을 가져 와서 만 만료되지 않은 게시물을 데이터베이스에서 가져 오는 것입니다. 나를 걸려 넘어 뜨리는 것은 모든 포스트가 다른 시간대를 가지고 있다는 것입니다. 그들 중 대부분은 자정에 만료되지만 다른 시간대에 따라 일부는 자정 동부에서 만료되는 반면 일부는 자정부터 만료됩니다. 이들은 모두 timezone.name ie와 같이 데이터베이스에 저장된 시간대와 함께 2012-08-28 00:00:00으로 저장됩니다. 아메리카/동부. 카운트 다운이 값의 존재에서 생성되는 오프셋 (offset) $를 들어 -4 그래서 카운트 다운에 대한 입력은 내가 사용하고있는 JQuery와 카운터

-4, 2012, 8 - 1, 28, 00, 00, 00 

가 어떤 작업을하지만 MySQL의에 현재 날짜를 비교하려고 할 때이 작업을 나던 날짜 입력. 나는 현재 시간을 설정하려고하면 동부

2012-08-27 20:00:00 

이 같은 값을 MySQL의 날짜 항목을 얻고 저장하기 전에 시간대 설정을 시도하고 난 오후 9시에있는 값을 얻을 내 미국/피닉스 시간대를 사용 동부 포스트가 만료되는 때 나는 나에게 게시물 일찍 시간이 만료 된 것입니다 의미

2012-08-28 21:00:00 

를 얻을. 이것은 내가 붙어있어 내가 여러 개의 DB 항목에 카운트 다운에 대한 데이터를 저장하고 유효 기간 만료 db 체크에 대한 하나만 열어 놨다. 내가 원하는 것을 성취하는 가장 좋은 방법이 무엇인지 알지 못한다. 어떤 도움을 주셔서 감사합니다. 감사.

+0

스택 오버플로에 오신 것을 환영합니다. Bruce! – rdlowrey

+0

이 게시물은 '사용자'가 작성합니까? 그들은 어딘가에 저장된 시간대를 정의 했습니까? DB의 날짜가 모두 같은 시간대를 사용합니까? (UTC?) DB의 타임 스탬프 필드에 모든 날짜를 UTC로 저장하는 것이 더 쉬울 수도 있으며, 나오는 모든 날짜는에서 표시되는 함수를 통해 실행됩니다. 사용자 시간대 및 모든 날짜는 사용자 시간대에서 UTC로 변환됩니다. 나는이 질문을 반드시 '대답'이라고 부르지 않을 것이기 때문에 의견에이 글을 게시하는 것은 아마도 많은 추가 변경이 필요할 것이기 때문입니다. –

답변

1

개인적으로 모든 만료 시간을 UTC (또는 다른 정의 된 시간대 - DB 서버와 응용 프로그램 서버가 동일한 경우 해당 시간대)로 변환 한 다음 데이터베이스 테이블에 입력 한 다음이 테이블을 기준으로 쿼리합니다 특정 사용자의 시간대. 예를 들어 WHERE 절은 다음과 같을 수 있습니다.

WHERE expiration_datetime > NOW() + INTERVAL X HOUR 

여기서 X는 사용자의 시간대에 시간 차이를 적용하는 위치입니다.

+0

그래서 UTC를 말할 때 타임 존 오프셋을 적용한 후 datetime을 저장합니다. 자정 동부는 2012-08-27 20:00:00에 저장됩니다. –

+0

예. 데이터베이스에 저장하기 전에 만료 날짜로 설정해야하는 모든 시간대를 조정하십시오. 다시 UTC를 예제로 사용했습니다. 모든 표준 시간대를 사용하여 데이터베이스를 표준화하고 지역화 표준 시간대에 필요에 따라 변환을 수행하는 한 원하는 표준 시간대를 실제로 사용할 수 있습니다. –

+0

UTC에 값을 저장하고 현재 날짜 시간을 얻으면 값을 UTC로 저장하면 원래의 게시물 예제 에서처럼 값이 일찍 만료됩니다. 올바른 datetime을 얻으려면 differnt 시간대에 걸쳐 다른 사용자의 현재 시간을 어떻게 얻습니까? –

0

게시물의 타임 스탬프가 정규화되지 않도록 설정하면 데이터베이스가 잘못 설계됩니다. 모든 타임 스탬프가 같은 시간대에있는 한 사용자의 시간대는 무의미합니다. 큰 문제는 아닙니다. 그래서 귀하의 질문에 대한 답변 - 귀하의 desing을 수정, 같은 타임 존 (간단하게 GMT)에 모든 타임 스탬프를 유지.