2013-02-27 48 views
80

Tôi muốn chuyển đổi chuỗi ngày để Date bằng javascript, sử dụng mã này:new Date() hoạt động khác nhau trong Chrome và Firefox

var date = new Date('2013-02-27T17:00:00'); 
alert(date); 

'2013-02-27T17:00:00' là UTC Hiện tại đối tượng JSON từ máy chủ.

Nhưng kết quả của đoạn mã trên là khác nhau giữa Firefox và Chrome:

Firefox trả:

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time) 

Chrome trả về:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 

Đó là khác nhau 1 ngày, kết quả chính xác tôi mong đợi là kết quả từ Chrome.

đang Demo: http://jsfiddle.net/xHtqa/2/

Làm thế nào tôi có thể khắc phục vấn đề này để có được kết quả tương tự từ cả hai?

+2

Có phải đó là trên cùng một máy tính? –

+0

@defaultlocale: phiên bản mới nhất 25.0.1364.97 m –

+0

@AaronDigulla: có, firefox và chrome trên cùng một máy tính xách tay –

Trả lời

58

Định dạng đúng cho UTC sẽ là 2013-02-27T17:00:00Z (Z là cho Zulu Time). Nối Z nếu không có mặt để nhận chuỗi ngày giờ UTC chính xác.

+1

Cảm ơn. Những công việc này. Nhưng có một nhật ký nói rằng, nó sẽ bị phản đối trong tương lai !!!. Bất kỳ ý tưởng xin vui lòng? –

+0

Life Saver ....... – Skumar

+0

cảm ơn rất nhiều, tôi đã ngồi với vấn đề này trong hai ngày, nhưng bài đăng này đã giải quyết mọi thứ. –

25

Vâng, rất tiếc, các thuật toán phân tích cú pháp ngày phụ thuộc vào triển khai thực hiện. Từ specification of Date.parse (được sử dụng bởi new Date):

Các chuỗi có thể được hiểu như một giờ địa phương, một thời gian UTC, hoặc một thời gian ở một số múi giờ khác, tùy thuộc vào nội dung của String. Hàm đầu tiên cố gắng phân tích cú pháp định dạng của chuỗi theo các quy tắc được gọi trong Định dạng chuỗi ngày giờ (15.9.1.15). Nếu Chuỗi không phù hợp với định dạng đó, hàm có thể quay trở lại bất kỳ chẩn đoán cụ thể nào về triển khai hoặc định dạng ngày tháng cụ thể của triển khai.

Để làm cho Date constructor không (có thể) sử dụng múi giờ địa phương, hãy sử dụng chuỗi ngày giờ có thông tin múi giờ, ví dụ: "2013-02-27T17:00:00Z". Tuy nhiên, rất khó để tìm một định dạng được phân tích cú pháp đáng tin cậy bởi mọi trình duyệt - định dạng ISO không được nhận dạng bởi IE < 8 (xem JavaScript: Which browsers support parsing of ISO-8601 Date String with Date.parse). Tốt hơn, hãy sử dụng dấu thời gian unix, tức là mili giây kể từ unix epoch hoặc sử dụng biểu thức điều chỉnh để chia chuỗi đó thành các phần của nó và sau đó nạp chúng vào Date.UTC.

+2

Nhưng thông số kỹ thuật (15.9.1.15) thực sự cho biết: "Giá trị của khoảng thời gian bù trừ múi giờ là" Z "" - vì vậy nó KHÔNG được thực hiện phụ thuộc – sinelaw

+12

OK, hiệu chỉnh. Có vẻ như một [sai lầm trong thông số ES5.1] (https://bugs.ecmascript.org/show_bug.cgi?id=112) - ý định là để phù hợp với ISO-8601 trong đó thiếu Z có nghĩa là giờ địa phương (vì vậy các kết quả phù hợp với Chrome ES5.1, Firefox & IE khớp với tiêu chuẩn ISO-8601) – sinelaw

+0

@sinelaw: Cảm ơn bạn đã điều tra thêm điểm đó. Tuy nhiên, bất kể những gì các tiểu bang spec, [cũ] trình duyệt vẫn đang làm điều đó một cách khác nhau :-) – Bergi

2

Tôi đã tìm thấy một thứ ở đây. Có vẻ như Firefox Inspector Console bản địa có thể có lỗi: Nếu tôi chạy "new Date()" trong Trình kiểm tra gốc, nó hiển thị ngày có múi giờ sai, múi giờ GMT, nhưng chạy cùng một lệnh trong Firebug Extension Console, ngày hiển thị sử dụng múi giờ chính xác của tôi (GMT-3: 00).

0

Thử sử dụng moment.js. Nó đi rất tốt và trong thời trang tương tự với tất cả các trình duyệt. đi kèm với nhiều tùy chọn định dạng. thời gian sử dụng ('ngày'). Định dạng ("") thay vì Ngày Mới ('ngày')

-1

Nhận thấy rằng FireFox không trả lại kết quả tương tự như Chrome. Có vẻ như định dạng bạn sử dụng trong kendo.toString cho ngày tạo sự khác biệt.

Kết quả giao diện điều khiển cuối cùng là những gì tôi cần:

enter image description here

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