2012-08-31 7 views
6

웹 사이트에서 위치 기능을 테스트하고 싶습니다.이 테스트를 수행하려면 다른 시간대를 사용해보십시오. 나는 다음과 같은 함수를 호출하는 자바 스크립트 코드로 시간대를 얻을 : 나는 아르헨티나이기 때문에 브라우저의 시간대를 조롱하는 방법?

var offset = new Date().getTimezoneOffset(); 

지금이 기능은 나 (180)에 반환, 나는 다른 시간 영역으로 테스트해야합니다. 누군가 이것을하는 방법을 알고 있습니까? 많은 감사합니다!

+0

컴퓨터의 시간대를 변경하십시오. 바로 브라우저가 그것을 얻습니다. –

+2

다른 TZ로 브라우저를 시작할 수도 있습니다. http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –

답변

16

허용되는 대답은 실제로 Date.getTimezoneOffset 메서드를 모의하지 않으며, 대신 동일한 이름을 가진 다른 메서드를 사용하기를 기대합니다.

Date 객체 자체에서는 작동하지 않으며 Carl Meyer가 지적했듯이 MomentJS와 같은 라이브러리에서는 작동하지 않습니다.

Date 프로토 타입의 getTimezoneOffset 메서드를 재정 의하여 더 이상 Date의 모든 인스턴스에 재정의 된 메서드가 포함되도록하는 것이 가장 좋습니다.

d = new Date(); // Mon Jul 13 2015 10:58:12 GMT+0200 (CEST) 
alert(d.getTimezoneOffset()); // -120, My local "real" timezone. 

// Save the original method. 
var getTimezoneOffset = Date.prototype.getTimezoneOffset; 

Date.prototype.getTimezoneOffset = function() { 
    return 160; 
} 
// Now Date objects will have the mocked timezone offset 
alert(d.getTimezoneOffset()); // 160, The mocked timezone. 

// Now restore the method to its original version 
Date.prototype.getTimezoneOffset = getTimezoneOffset; 
alert(d.getTimezoneOffset()); // -120 
+0

사용하는 라이브러리에 따라 일부 라이브러리는 "자신의 방식"으로 사용하고자 할 것입니다. 그리고 이러한 라이브러리를 추가 코드로 "수정"하려고하면 예기치 않게 .... 특히 [할리우드 원칙] (https://en.wikipedia.org/wiki/Inversion_of_control)을 사용하는 사람들에게 예기치 않게 중단 될 수 있습니다. [적절한 개발자 도구] (http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone-dependent-application-againts-different-timezo#comment58949204_4976769)가 있으면 더 좋을 것입니다. 그것을 위해 .... – Pacerier

+0

대답은 나에게 의미가 있지만, 코드를 보면 원래 버전을 저장하는 문장이 누락되었을 수 있습니다. 예를 들어'var getTimezoneOffset = Date.prototype.getTimezoneOffset; '과 같은 것 – mikeapr4

+0

Thanks mikeapr4, 네가 옳아. 누락 된 과제를 추가했습니다. –

-7

이 기능을 사용할 수 있습니다.

function getTimezoneOffset() { 
    if (DEBUG) { 
    return 600; // for Australian Eastern Standard Time 
    } 

    return new Date().getTimezoneOffset(); 
} 

여기서 DEBUG은 테스트 중인지 여부를 결정하기 위해 이전에 설정된 변수입니다.

그런 다음 Date 개체의 메서드 대신 코드 전체에서 해당 함수를 사용하십시오.

+5

라이브러리를 사용하는 경우 도움이되지 않습니다. 'MomentJS'와 같이 - 래퍼 함수를 ​​사용하도록 강요 할 수는 없습니다. –