2013-08-02 27 views
15

Tôi có một dịch vụ web mà đang trở lại một ngày như chuỗi sau:Moment.js và Unix Epoch chuyển đổi

/Date(1377907200000)/

tôi sử dụng MomentJS để phân tích này cho một đối tượng moment.

moment("/Date(1377907200000)/") =>Fri Aug 30 2013 20:00:00 GMT-0400

Tất cả điều đó là tốt. Nhưng khi tôi gọi unix() trên đối tượng, tôi được cung cấp giá trị 1377907200. Tuy nhiên, điều này tương ứng với Fri Jan 16 1970 17:45:07 GMT-0500. Tôi chỉ có thể nhân giá trị trả lại bởi unix() nhưng điều đó có vẻ cẩu thả với tôi. Tôi nghi ngờ rằng những gì tôi đang làm bằng cách gọi unix() là không chính xác những gì tôi nghĩ rằng nó được. Tôi có cần chỉ định một số loại định dạng khi gọi unix() không? Tôi đang thiếu gì ở đây?

JSFidle showing the conversion to moment and then back.

+0

Bạn không cần phải chuyển đổi sang đối tượng ngày theo cách đó, thời điểm có thể xử lý 'thời điểm (1377907200000) 'tốt. Tò mò tại sao dịch vụ web trả về ngày như vậy. – mix3d

+0

Chúng tôi sử dụng một dịch vụ web trả về nó - điều này là do người tiêu dùng mục tiêu của API thường là JavaScript, mà "từ Epoch trong mili giây" thay vì giây. Nó nhắm mục tiêu đến người tiêu dùng có khả năng nhất. –

Trả lời

48

Câu trả lời được cung cấp bởi meagar là chính xác, từ góc độ thời gian JavaScript/Unix. Tuy nhiên, nếu bạn chỉ nhân với 1000, bạn sẽ mất bất kỳ độ chính xác phụ thứ hai nào có thể đã tồn tại trong dữ liệu của bạn.

Moment.js cung cấp hai phương pháp khác nhau, như được mô tả in the docs. .unix() trả về giá trị tính bằng giây. Nó có hiệu quả chia cho 1000 và cắt bớt bất kỳ số thập phân nào. Bạn muốn sử dụng phương thức .valueOf(), phương thức này chỉ trả về mili giây mà không sửa đổi.

+1

Cảm ơn các chi tiết bổ sung. Ít nhất là cho mặt hàng này sẽ không cần thiết vì độ chi tiết chỉ là một ngày. –

+0

Ồ, thực ra, tôi thấy điều đó mang lại chính xác những gì tôi mong đợi. Tôi không muốn thay đổi giá trị theo bất kỳ cách nào để câu trả lời của bạn thực tế là lý tưởng. –

+0

Xin lỗi, meagar .. –

10

Trong đất JavaScript, khi bạn chuyển đổi một Date đến một số nguyên, bạn nhận được một số milli giây kể từ khi kỷ nguyên unix. Thời gian Unix truyền thống là số lượng giây từ thời đại. Nhân với 1000 là tùy chọn đúng.

+0

Điều đó có ý nghĩa. Cảm ơn lời giải thích. –

+3

Hoặc chỉ là 'thời điểm ("/Ngày (1377907200000)/"). ToDate(). GetTime()' –

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