2013-08-13 1 views
0

내 웹 페이지에 다음 javascript를 등록합니다. 사용자가 다시 게시하면 txtTimeZoneOffSet 숨김 필드가 빈 칸으로 표시됩니다. 컴퓨터에서 테스트 할 때마다 가치가 있습니다. 다른 브라우저 (I.E, FireFox 및 Safari)에서 발생합니다.getTimezoneOffset이 항상 작동하지 않습니다

사용자 오프셋을 얻으려고하기 때문에 날짜를 입력 할 때 서버에서 UTC로 변환하고 같은 시간대의 모든 것을 처리 할 수 ​​있습니다. 그러면 날짜를 다시 렌더링 할 때마다 시간대에 있는지 확인하십시오.

<script type='text/javascript'> 
     $(window).load(function() { 
      var d = new Date(); 
      var tz = d.getTimezoneOffset(); 

      $('#txtTimeZoneOffSet').val(tz/60); 
     }); 
</script> 

왜이 기능이 100 % 작동하지 않는지 누구에게 알 수 있습니까?

답변

1

jQuery는 괜찮아 보입니다. 따라서 JavaScript가 비활성화되었거나 jQuery를로드하지 않는 한 왜 작동하지 않는지 알 수 없습니다.

그러나 사용자의 현재 오프셋이 모든 날짜에 동일하게 적용된다는 잘못된 가정하에 작업 한 것입니다. 일광 절약 시간제를 사용하는 모든 시간대에서는 잘못되었을 수 있습니다.

더 나은 방법은 브라우저에서 UTC로 변환하는 것입니다. 또는 최소한 getTimezoneOffset 호출에서 해당 날짜/시간을 사용하십시오.

질문에 대한 응답으로 업데이트 답변

, 당신이 지금 가지고있는 코드는 현재 이미 오프셋 얻을 것이다. 당신은 그들이 입력 할 수있는 모든 날짜에 대해 동일한 오프셋이 될 것이라고 보장 할 수 없습니다. 예를 들어 :

<input type="text" id="someDate" /> 
var someDateString = $('#someDate').val(); 
var dt = new Date(someDateString); 
var offset = dt.getTimezoneOffset(); 

텍스트 입력의 값이 변수이기 때문에, 많은 시간대에 당신은 당신이 6 월 윌과는 다른 월 오프셋을 얻을 것이다. 그래서 더 나은 것은 바로 브라우저에서 UTC로 변환하는 것입니다 :

var someDateString = $('#someDate').val(); 
var dt = new Date(someDateString); 
var s = dt.toISOString(); 

문자열 s는 ISO8601 형식으로 될 것이며, 이미 UTC로 변환됩니다.

물론 입력 문자열이 구문 분석되는 방식을 훨씬 잘 제어 할 수 있기 때문에 나는 이것을 moment.js을 사용하여 수행 할 것입니다.

일반적으로이 방법을 사용하면 충분합니다. 무엇이인데 사용자가 없기 때문에 서버에서이 변환을 수행해야 할 가능성이있는 경우 의 시간대를 알아야합니다. 오프셋뿐만 아니라 실제 시간대. timezone tag wiki의 "시간대! = 오프셋"을 참조하십시오.

가장 좋은 방법은 그것들을 요청하는 것입니다. this one과 같은지도 기반 선택기는 좋은 반응입니다. jsTimezoneDetect을 사용하여 기본 선택에서 추측 할 수도 있습니다. 궁극적으로 서버에서 사용할 수있는 America/New_York과 같은 문자열 식별자 뒤에 있습니다. .Net에서는 Noda Time의 TZDB 제공 업체와 함께 사용할 수 있습니다.당신이 어떤 공상 라이브러리를 원하지 않는 경우

, 당신은 윈도우 시간대를 고수하고 .Id 키이며, .DisplayName이 값 TimeZoneInfo.GetSystemTimeZones()에서 드롭 다운 목록을 표시 할 수 있습니다.

+0

예 "때때로"작동하지 않는 이유도 혼란 스럽습니다. 내 가정 (나는 생각하기에 나쁘다)은 자바 스크립트를 사용 가능하게했기 때문에 사이트 전체에 문제/오류가 있기 때문이다. 그래서 사용자가 현재 유효한 "오프셋"(일광 절약 시간 포함)을 얻는 더 좋은 방법이 무엇인지에 대한 샘플 코드가 있습니다. 내 Google 검색이 많이 나타나지 않았습니다. 또는 개발 된 jQuery 플러그인에 대해 알고 계십니까? – adondero

+0

감사합니다. 그것이 바로 그것을 올바른 방향으로 지적했기 때문에 대답으로 표시했습니다. 한 가지 옵션은 사용자가 로그인 할 때 표준 시간대를 표시하고 올바르지 않으면 변경하도록하는 것입니다. – adondero

관련 문제