2015-10-14 22 views
5

Điều kỳ lạ, các kết quả khác nhau trong trình duyệt khác nhau cho một Ngày mới().Ngày mới() hiển thị các kết quả khác nhau trong Chrome hoặc Firefox

Trong Chrome 45.0.2454.101 m:

new Date(2015,9,1) 
Thu Oct 01 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) 

Trong Firefox 40.0.3 (Thanh tra default/console)

new Date(2015,9,1) 
Date 2015-09-30T22:00:00.000Z 

thông tin bổ sung
Nếu tôi cố gắng trong Firefox với bảng điều khiển của tiện ích FIREBUG, hoạt động tốt như Chrome. Điều gì đang xảy ra? Có vẻ như Firefox không đếm số dư, trên thực tế nó là 2 giờ sau ngày chính xác. Tôi đã làm thử nghiệm trên máy trạm khác và tất cả dường như có "lỗi" này.

+2

Điều này có thể liên quan đến http://stackoverflow.com/a/15110385/5147646 không? –

Trả lời

4

Đây chỉ là hành vi của bảng điều khiển gỡ lỗi. Hai giá trị ngày bạn hiển thị đều giống nhau và là giá trị chính xác. Bạn chỉ nhìn thấy giờ địa phương trong Chrome, trong khi Firefox chọn hiển thị thời gian UTC trong bảng điều khiển gỡ lỗi.

Chính xác hơn, Chrome, IE và hầu hết các trình duyệt khác chỉ cần gọi .toString() trên đối tượng trong khi Firefox đang gọi .toISOString().

FF Screenshot

Lưu ý rằng Firefox có một lỗi mà chúng tôi cho thấy sai tên của múi giờ (Tiêu chuẩn thay vì ánh sáng ban ngày), nhưng bạn có thể thấy giá trị debugger phù hợp với giá trị ISO8601 UTC.

4

NẾU bạn không muốn múi giờ bù đắp được đưa bạn có thể sử dụng Date.UTC

Lưu ý: Trong trường hợp ngày được gọi là một nhà xây dựng với nhiều hơn một lập luận, lý lẽ specifed đại diện theo giờ địa phương . Nếu UTC là mong muốn, hãy sử dụng Ngày mới (Date.UTC (...)) với cùng các đối số.

~ MDN

Output từ Firefox dev console:

> new Date(2015,9,1) 
    Date 2015-09-30T22:00:00.000Z // reproduces your problem, my local time is GMT+0200 
> new Date(Date.UTC(2015,9,1)) 
    Date 2015-10-01T00:00:00.000Z // UTC time 

Tuy nhiên 00:00:00 GMT+020022:00:00.000Z nhiều cách khác nhau chỉ để đại diện cho múi giờ bù đắp trong chuỗi đại diện Ngày của. Sự khác biệt là phương thức được sử dụng khi in trên bảng điều khiển: hầu hết các trình duyệt đều sử dụng .toString() trong khi Firefox sử dụng .toISOString(). (Đã chỉnh sửa; trước đây đã tuyên bố rằng việc triển khai phương pháp toString khác nhau không đúng).

Trong cả hai Chrome (Thu Oct 01 2015 00:00:00 GMT+0200) và Firefox (Date 2015-09-30T22:00:00.000Z) phương pháp như .getDate().getMonth() trở lại cùng các giá trị (19 tương ứng). Các đối tượng Date giống nhau.

+0

Nó không thực sự là 'Date.toString()' thực hiện. Điều đó là tốt. nó chỉ là trình gỡ rối trong FF sử dụng 'Date.toISOString()' thay thế. –

+0

@MattJohnson cảm ơn vì đã làm rõ. – pawel

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