2008-10-07 5 views
5

나는 모든 datetime 값을 데이터베이스에 저장하는 다중 시간대 웹 응용 프로그램을 가지고 있습니다. 서버에서 작업이 발생하면 UTC로 시간을 쉽게 변환 할 수 있습니다.웹 응용 프로그램의 클라이언트가있는 표준 시간대를 감지하고 저장하는 가장 좋은 방법은 무엇입니까?

그러나 클라이언트가 시간 또는 시간대를 입력하면이를 감지하고 저장하는 가장 좋은 방법은 무엇입니까?

  1. 는 해당 페이지의 ICallbackEventHandler 통해 서버 측 코드에 Date.getTimezoneOffset() (자바 스크립트)
  2. 포스트의 값을 가져옵니다 :

    나는 현재 다음을 수행하고있다.

  3. 해당 값을 세션에 저장하십시오.
  4. 이후 요청시 클라이언트의 시간대를 사용하여 출력/입력 datetime 값을 계산하십시오.

실제 구현과 관계없이 이는 세련된 해결책처럼 보입니다. 누구든지 더 좋은 방법이 있습니까?

답변

4

나는 아주 비슷한 것을하고 있었지만, 이제는 자바 스크립트를 사용하여 모든 시간을 클라이언트 측의 로컬로 변환하는 것을 선호한다고 생각합니다. 서버는 생성 된 페이지에서 UTC로 모든 시간을 제공하고 자바 스크립트는 페이지가로드되면이를 변환합니다.

나는 항상 (UTC) 시간을 알고 있으므로 서버 측 코드에 혼란을주지 않습니다. 클라이언트 측에서는 jquery와 each() 함수를 사용하여 모든 시간 값을 한 번에 형식화합니다. 나는 숨겨진 필드에 유닉스 시간으로 각각의 시간을 써서 jquery로 처리하기 쉽도록 만든다.

이 방법으로 볼 수있는 유일한 문제는 다음과 같습니다. a) 자바 스크립트에서 아직 날짜/시간 형식 지정 루틴이 아직 없습니다. b) 사용자가 자바 스크립트를 끄면 작동하지 않습니다. .

+0

이 깔끔한 해결책이다, 나는 생각 하나. 내가 퇴장 한 유일한 이유는 사용자가 X 시간 동안 조치를 취할 때처럼 "카운트 다운 타이머"시나리오였습니다. 나는 논리가 서버에서 일어나야한다고 느꼈다.하지만 자바 스크립트에서는 괜찮을 것이라고 생각한다. –

+0

사용자에 대한 시간 제한은 서버와 확실히 일치해야합니다. 카운트 다운 타이머는이 질문과 관련이있는 것으로 보입니다. http://stackoverflow.com/questions/198049/prevent-js-alert-from-pause-timers 클라이언트 측 유효성 검사가 부정 행위에 취약하다는 것은 비슷한 생각입니다. – Mnebuerquo

+0

@Mnebuerquo 좋은 지적. 아마 하이브리드 방법으로 가야 할 것입니다. –

2

HttpRequest 개체의 "header"속성을 사용하여 클라이언트가 보낸 "If-Modified-Since"헤더를 쿼리 할 수 ​​있습니다. 이 헤더는 다음과 같이 클라이언트의 시간대를 포함하는 형식으로 날짜를 포함해야합니다 :

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT 

간단한 문자열 추출 당신에게 시간대 코드를 제공 할 것입니다. 그러나 모든 브라우저가 해당 헤더를 보내는 데 일관된 것은 아니므로 조금 실험 해보아야합니다.

관련, 파브

+1

정말 멋진 솔루션입니다! 나는 모든 자바 스크립트를 사용할 필요가 없기 때문에 그것이 모든 브라우저에서 작동했으면 좋겠다! 내가 결국 볼 수있는 것은 HttpModule 또는 페이지에서 파생 된 클래스로, 첫 번째 요청에 해당 변수를 저장합니다. 감사! –

+0

정확히 어떻게 작동합니까? 헤더에 시간대 대신 gmt가있는 것처럼 보입니다. 이는 클라이언트의 컴퓨터가 GMT로 설정되었거나 브라우저가 요청에 대해 GMT를 항상 사용한다는 것을 의미합니까? – Mnebuerquo

관련 문제