2011-01-18 39 views
5

Tôi gặp sự cố với lớp Ngày có vẻ như trả lại múi giờ sai cho một ngày được phân tích cú pháp. Sử dụng mã dưới đây tạo một đối tượng ngày cho ngày 24 tháng 5 năm 1966 15:46 BST:ExtJS ngày và múi giờ

date = "1966-05-24T15:46:01+0100"; 
var pDate = Date.parseDate(date, "Y-m-d\\TH:i:sO", false); 

Sau đó tôi gọi đây là:

console.log(pDate.getGMTOffset()); 

Tôi đang mong đợi để có được sự bù đắp gắn liền với orignal ngày trở lại (tức là GMT + 1), nhưng thay vào đó tôi nhận được múi giờ địa phương của trình duyệt thay thế. Nếu trình duyệt được đặt thành múi giờ đủ xa trước GMT, phần ngày của ngày cũng sẽ được cuộn qua (vì vậy ngày sẽ xuất hiện vào ngày 25 tháng 5 năm 1966).

Có ai biết cách giải quyết vấn đề này và lấy Ext để nhận ra múi giờ chính xác của ngày được phân tích cú pháp thay vì múi giờ của trình duyệt địa phương không?

Nếu điều này là không thể, có thể Ext buộc phải sử dụng GMT thay vì cố gắng diễn giải múi giờ?

Trả lời

6

Tôi đã kiểm tra parseDate() implementation in ExtJS source codedocumentation of Date in core JavaScript, hàm tạo Date() được ExtJS sử dụng không hỗ trợ thông tin múi giờ. Các đối tượng Date JavaScript đại diện cho một giá trị UTC, không có múi giờ. Trong khi phân tích cú pháp trong mã nguồn ExtJS, múi giờ bị mất trong khi chênh lệch tương ứng tính bằng phút/giây được thêm vào Ngày.

Sau đó, tôi đã kiểm tra source code of getGMTOffset() defined by ExtJS: nó tạo chuỗi thời gian vùng bằng hàm getTimezoneOffset() được xác định trong JavaScript.

Trích dẫn các documentation of getTimezoneOffset():

Các múi giờ bù đắp là sự khác biệt giữa giờ địa phương và Greenwich Mean Time (GMT). Thời gian tiết kiệm ánh sáng ban ngày ngăn giá trị này là hằng số .

Các múi giờ không phải là một biến được lưu trữ trong ngày, đó là một giá trị mà thay đổi tùy theo giai đoạn của năm rằng ngày rơi vào.

Trên máy tính của tôi, với một miền địa phương Pháp ,

new Date(2010,1,20).getTimezoneOffset() 
// -60 
new Date(2010,9,20).getTimezoneOffset() 
// -120 

Edit: hành vi này là không cụ thể cho ngày phân tích cú pháp trong ExtJS, các lưu ý sau đây trong documentation of Date.parse() on Mozilla Doc Center là liên quan ở đây cũng như:

Lưu ý rằng trong khi múi giờ specifiers được sử dụng trong ngày chuỗi phân tích cú pháp để đúng cách giải thích các lý lẽ, họ không ảnh hưởng đến giá trị trả về, mà luôn luôn là số mili giây giữa 1 Tháng một 1970 00:00:00 UTC và các điểm trong thời gian đại diện bởi các đối số.

+2

Cảm ơn, rất nhiều thông tin hữu ích ở đó. Đối với những người googlers trong tương lai, người đã giải quyết vấn đề của tôi bằng cách thiết lập tất cả các ngày đến 12 giờ trưa, vì vậy Ext sẽ không thể làm cho ngày bị đảo ngược do đó nhận được xung quanh vấn đề ban đầu. Không hoàn hảo, nhưng nó hoạt động đủ tốt .... – TimS

0

Hai xu của tôi, bởi vì tôi thực sự không thể đặt toàn bộ thời gian của mình thành 12:00 như Tim đã làm.Tôi đăng tải trên sencha forum

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