2012-08-31 25 views
6

Tôi muốn kiểm tra tính năng vị trí trong trang web, để thực hiện kiểm tra này, tôi cần thử các múi giờ khác nhau. Tôi có được múi giờ với mã javascript, gọi hàm sau:Làm thế nào để giả lập múi giờ của trình duyệt?

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

Bây giờ chức năng này trả lại cho tôi 180 vì tôi ở Argentina, tôi cần thử nghiệm với các múi giờ khác nhau. Ai đó biết làm thế nào để làm điều này? Rất cám ơn !!

+0

Thay đổi múi giờ trên máy tính của bạn. Đó là nơi mà trình duyệt nhận được nó. –

+2

Bạn cũng có thể khởi động trình duyệt bằng một TZ khác: http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –

Trả lời

16

Câu trả lời được chấp nhận không thực sự mô phỏng phương pháp Date.getTimezoneOffset, thay vào đó, nó hy vọng bạn sử dụng một phương pháp khác có cùng tên.

Nó sẽ không hoạt động trên các đối tượng Ngày tháng và như Carl Meyer chỉ ra, nó sẽ không hoạt động đối với các thư viện như MomentJS.

Cách tốt hơn là ghi đè phương pháp getTimezoneOffset trên nguyên mẫu Date để tất cả các phiên bản Date đều có phương pháp ghi đè.

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

Tùy thuộc vào thư viện bạn sử dụng, một số thư viện sẽ muốn thực hiện "theo cách của họ". Và cố gắng "sửa" các thư viện này với mã bổ sung có thể phá vỡ mọi thứ bất ngờ .... đặc biệt là đối với những người sử dụng [nguyên tắc hollywood] (https://en.wikipedia.org/wiki/Inversion_of_control). Sẽ tốt hơn nếu có [công cụ phát triển thích hợp] (http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone-dependent-application-againts-different-timezo#comment58949204_4976769) cho nó .... – Pacerier

+0

Câu trả lời có ý nghĩa với tôi, nhưng nhìn vào mã, nó có thể thiếu câu lệnh để lưu phiên bản gốc, giống như 'var getTimezoneOffset = Date.prototype.getTimezoneOffset;' – mikeapr4

+0

Cảm ơn @ mikeapr4, bạn đúng. Tôi đã thêm bài tập còn thiếu. –

-7

Bạn có thể sử dụng chức năng cho việc này.

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

    return new Date().getTimezoneOffset(); 
} 

Trường hợp DEBUG là một biến được đặt trước đó để xác định xem bạn có đang thử nghiệm hay không.

Sau đó, sử dụng chức năng đó trong suốt mã của bạn, thay vì phương thức trên đối tượng Ngày.

+5

Điều này không giúp ích gì nếu bạn đang sử dụng thư viện như 'MomentJS' - bạn không thể ép buộc nó sử dụng hàm bao bọc của bạn. –

Các vấn đề liên quan