2010-09-23 40 views
5

Tôi có một webservice trả về ví dụ như một đối tượng DateTime: DepartureDate. tôi sử dụng ajax để lấy này và theo quan điểm của tôi, tôi chuyển đổi chuỗi ngày JSON để một đối tượng ngày javascript với chức năng này:Chuyển đổi các ngày JSON không có múi giờ

function convertToDate(jsonDate) { 
    return eval("new " + jsonDate.substring(1, jsonDate.length - 1)); 
} 

Vấn đề là new Date() mất thời gian cục bộ trên máy tính khách hàng trong việc xem xét, vì vậy khách hàng ở các quốc gia khác nhau có được ngày khác nhau. Tôi muốn có được ngày chính xác được trả về từ webservice. Có cách nào dễ dàng để thực hiện việc này không?

+0

những gì giá trị của biến "jsonDate" –

+0

có thể là ví dụ "/ ngày (1285321800000) /" – knepe

Trả lời

6

Vấn đề là new Date() mất thời gian cục bộ trên máy tính khách hàng trong việc xem xét

Nope. Tạo một ngày mới bằng cách sử dụng hàm tạo dấu thời gian sẽ có một dấu thời gian UTC.

Ví dụ trên máy tính của tôi trong UTC + 1:

new Date(0) // Thu Jan 01 1970 01:00:00 GMT+0100 (CET) 

OK, mặc định toStringmàn ngày này như 1:00:00 mà trông sai, nhưng đó thực sự là thời gian chính xác. 01:00:00 trong UTC + 1 là 00:00:00 theo giờ UTC, tức là thời điểm được mô tả bằng dấu thời gian 0.

Nếu bạn muốn hiển thị các ngày mà bạn đã tạo ra từ một dấu thời gian trong UTC, sử dụng date.toUTCString() hay lấy và định dạng các phần consistuent kể từ ngày sử dụng getUTCFullYear(), getUTCMonth(), vv

Xin vui lòng, tuy nhiên, không eval.

new Date(parseInt(jsonDate.slice(6, -1), 10)) 
+0

Cảm ơn bạn đã bobince câu trả lời tuyệt vời của bạn. Tôi không giỏi về ngày tháng và công cụ, vì vậy tôi có thể không hiểu mọi thứ ở đây, nhưng tôi đã làm những gì bạn gợi ý, và nó vẫn là kết quả tương tự. Nếu tôi thay đổi múi giờ trên máy của mình, thời gian sẽ thay đổi (tôi muốn chúng giữ nguyên bất kể múi giờ của bạn ở đâu và chúng sẽ theo múi giờ AST.) – knepe

+0

Thời gian * được hiển thị * bằng 'toString()' thay đổi để phản ánh múi giờ của bạn, nhưng điều đó không có nghĩa là ngày khác nhau. 'new Date (1285321800000) .getUTCHours()' luôn là '9' bất kể múi giờ của bạn. Gắn bó với các hàm 'getUTC ...' và 'setUTC ...' và ngày tháng sẽ hoạt động như bạn mong đợi. – bobince

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