2012-01-30 34 views
9

Tôi đang cố tạo đối tượng ngày từ một chuỗi. tôi nhận được ngày ở định dạng ISO trừ mili giây phần như "2012-01-30T16: 23: 12"Firefox new Date() từ chuỗi cấu trúc thời gian trong múi giờ địa phương

Kết quả khác nhau khi tôi chạy sau mã trong trình duyệt IE, Chrome và Firefox (Link to Fiddle)

currentDate = "2012-01-30T16:23:12"; 
var date = new Date(currentDate); 
alert(date); 

IE và Chrome xem xét chuỗi như UTC nhưng firefox xem xét theo múi giờ địa phương.

Có cách nào chung chung để vượt qua nó, ngoại trừ việc kiểm tra tác nhân người dùng ở mọi nơi?

+0

bản sao có thể có của [Vấn đề điều chỉnh múi giờ javascript gây phiền nhiễu] (http://stackoverflow.com/questions/7629286/annoying-javascript-timezone-adjustment-issue) –

Trả lời

12

Bạn có thể thử phụ thêm múi giờ không bù đắp +00:00 cho UTC:

currentDate = "2012-01-30T16:23:12+00:00"; 

Điều đó giúp đỡ? (Xin lỗi tôi không thể kiểm tra nó mà không thực sự thay đổi múi giờ của tôi.)

+0

Cảm ơn. Nó hoạt động với "+00: 00". Theo cách đó, cả ba trình duyệt đều có cùng giá trị epoch. http://jsfiddle.net/harsha/9ybtN/2/ – harsha

+0

Xin lỗi, có nó cần đại tràng –

2

Hm, giải pháp thay thế có thể là phân tích cú pháp chuỗi và phương pháp sử dụng.

setUTCDate()  
setUTCFullYear() 
setUTCHours() 

Có lẽ, đó là giải pháp tốt hơn

+2

+1, đây không phải là cách giải quyết nhưng cách * chính xác *, xem: http://stackoverflow.com/questions/7629286 –

0

Không đảm bảo rằng đầu vào sẽ được phân tích cú pháp chính xác nếu ở định dạng hiện tại. Thường trình Date.parse() chỉ được yêu cầu để phân tích chuỗi theo một định dạng cụ thể — việc phân tích cú pháp các định dạng khác phụ thuộc vào việc triển khai thực hiện. Nếu bạn dám dựa vào việc triển khai đáp ứng yêu cầu, hãy thêm dữ liệu để phù hợp với định dạng cụ thể:

new Date(currentDate + '.000Z') 

Hoặc, sử dụng thư viện có thể phân tích dữ liệu ở định dạng hiện tại, ví dụ: jQuery hoặc Globalize.js.

Các cân nhắc tương tự áp dụng cho các ngày viết. Không đảm bảo định dạng đầu ra nếu bạn sử dụng Date.toString(), hoặc rõ ràng hoặc như trong alert(date). Ngay cả trong một máy tính, các trình duyệt khác nhau sẽ sử dụng các định dạng được bản địa hóa khác nhau.

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