2012-04-04 68 views
15

Tôi đang sử dụng moments.js để làm việc với các ngày trong javascript. Tất cả các ngày đều ở dạng UTC (hoặc phải là).Sự khác biệt về Moment.js giữa các ngày UTC

Tôi có ngày sau (60 phút từ thời điểm hiện tại):

//Wed, 04 Apr 2012 21:09:16 GMT 
to = moment.utc().add('m', 60).toDate(); 

Bây giờ tôi muốn nhận được sự khác biệt chỉ trong vài giây giữa ngày này và UTC datetime hiện nay, vì vậy tôi làm:

seconds = moment.utc().diff(to, 'seconds'); 

Điều này trả về 10800 thay vì 3600, vì vậy 3 giờ thay vì một.

Bất kỳ ý tưởng nào tôi đang làm sai?

Cảm ơn bạn!

EDIT:

tôi cập nhật các dòng để seconds = moment().diff(to, 'seconds'); và nó được giây currect, nhưng nó -3600 thay vì tích cực.

EDIT:

bây giờ tôi có hai khoảnh khắc những đối tượng:

{ _d: Thu, 05 Apr 2012 17:33:18 GMT, _isUTC: true } 
{ _d: Thu, 05 Apr 2012 16:38:45 GMT, _isUTC: true } 

d1 và d2.

Khi tôi làm d1.diff(d2, 'hours', true); trả lại số 4. Nó chắc chắn là một cái gì đó để làm với UTC tôi nghĩ, nhưng có vẻ như điều này nên làm việc.

Trả lời

0

Có thể là múi giờ khởi động vì bạn đang sử dụng toDate(). Cố gắng làm việc trực tiếp với thời điểm (tức là thay đổi nó thành to = moment.utc().add('m', 60);).

+0

Hm, rằng 'thành' thực sự là một giá trị đến từ các cơ sở dữ liệu, mà đã được tạo bằng cách sử dụng mã ở trên, vì vậy tôi phải sử dụng toDate() để lấy chuỗi lưu trữ. – dzm

+0

@Super Tôi đã chỉnh sửa bài đăng. Làm việc với các đối tượng thời gian là UTC, nhận các vấn đề tương tự. – dzm

16

Đây là lỗi hợp pháp. Tôi vừa nộp đơn đăng ký tại đây: https://github.com/timrwood/moment/issues/261

Để giải quyết vấn đề này, hãy sử dụng các mục sau.

var a = moment.utc().add('m', 60).toDate(), 
    b = moment().diff(to, 'seconds'); // use moment() instead of moment.utc() 

Ngoài ra, nếu bạn cần phải nhận được toString ngày, bạn có thể sử dụng moment().toString() vì nó proxy để các bọc Date().toString()

+7

Chỉ cần thông tin, điều này đã được sửa trong phiên bản 1.6.0. – timrwood

+0

Lỗi này vẫn tồn tại khi giao dịch với Giờ mùa hè. Ví dụ: Sự khác biệt trong những ngày từ 15/10/2017 đến 22/10/2017 (UTC). Ngày đầu tiên không có trong Giờ mùa hè Brazil, nhưng ngày thứ hai là. Sửa chữa bạn đề nghị ở trên đã làm các trick. – Joaobrunoah

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