2013-06-27 44 views
70

phiên bản Moment: 2.0.0Thêm một khoảng thời gian để một khoảnh khắc (moment.js)

After reading the docs, tôi nghĩ đây sẽ là thẳng về phía trước (Chrome console):

var timestring1 = "2013-05-09T00:00:00Z"; 
var timestring2 = "2013-05-09T02:00:00Z"; 
var startdate = moment(timestring1); 
var expected_enddate = moment(timestring2); 
var returned_endate = startdate.add(moment.duration(2, 'hours')); 
returned_endate == expected_enddate // false 
returned_endate // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…} 

Đây là một tầm thường Ví dụ, nhưng tôi thậm chí không thể làm cho nó hoạt động. Tôi cảm thấy như tôi đang thiếu một cái gì đó lớn ở đây, nhưng tôi thực sự không nhận được nó. Ngay cả điều này dường như không hoạt động:

startdate.add(2, 'hours') 
    // Moment {_i: "2013-05-09T00:00:00Z", _f: "YYYY-MM-DDTHH:mm:ss Z", _l: undefined, _isUTC: false, _a: Array[7]…} 

Mọi trợ giúp sẽ được đánh giá cao.

Edit: mục tiêu cuối cùng của tôi là để thực hiện một biểu đồ trạng nhị phân như một tôi đang làm việc trên đây: http://bl.ocks.org/phobson/5872894

Như bạn thấy, tôi đang sử dụng hình nộm x-giá trị trong khi Tôi làm việc thông qua vấn đề này.

Trả lời

153

Tôi nghĩ rằng bạn bỏ lỡ một điểm quan trọng trong tài liệu cho .add()

đột biến thời điểm ban đầu bằng cách thêm thời gian.

Bạn có vẻ coi đó là hàm trả về kết quả không thay đổi. Lỗi dễ mắc phải. :)

Nếu bạn sử dụng giá trị trả lại, nó là đối tượng thực tế giống như đối tượng bạn đã bắt đầu. Nó vừa trở về như một sự tiện lợi cho phương pháp chuỗi.

Bạn có thể giải quyết hành vi này bằng cách sao chép khoảnh khắc, as described here.

Ngoài ra, bạn không thể chỉ sử dụng == để kiểm tra. Bạn có thể định dạng từng khoảnh khắc cho cùng một đầu ra và so sánh chúng, hoặc bạn chỉ có thể sử dụng phương thức .isSame().

Mã của bạn bây giờ là:

var timestring1 = "2013-05-09T00:00:00Z"; 
var timestring2 = "2013-05-09T02:00:00Z"; 
var startdate = moment(timestring1); 
var expected_enddate = moment(timestring2); 
var returned_endate = moment(startdate).add(2, 'hours'); // see the cloning? 
returned_endate.isSame(expected_enddate) // true 
+0

Tôi thực sự đánh giá cao những phản ứng, Matt. Nó làm sáng tỏ nhiều thứ. Dưới đây là những gì tôi vẫn không thể có được đầu của tôi xung quanh: mỗi đại diện của 'return_endate' mà tôi biết làm thế nào để truy cập vẫn còn lúc nửa đêm, và không phải là 2 giờ sáng. Tôi cần đến 2 giờ sáng để tôi có thể tạo biểu đồ D3 mà tôi đang làm việc (xem câu hỏi đã chỉnh sửa). Cảm ơn một lần nữa. –

+8

Đảm bảo bạn gọi một trong các phương thức hiển thị, chẳng hạn như '.format()' hoặc '.toDate()' hoặc '.unix()'. Chỉ cần nhìn vào khoảnh khắc thô sẽ không hoạt động tốt. Bạn cũng có thể muốn làm một cái gì đó như 'yourmoment.utc(). Format()' để định dạng nó thành utc thay vì giờ địa phương. –

+2

Vâng, hãy quên rằng những khoảnh khắc này không phải là bất biến được ya mỗi lần trong một thời gian. Tốt đẹp! – welbornio

6

tôi đang làm việc trên một ứng dụng mà chúng ta theo dõi con đường sống. Hành khách muốn hiển thị vị trí hiện tại của tài xế và thời gian đến dự kiến ​​để đến được vị trí của họ. Vì vậy, tôi cần phải thêm một số thời gian vào thời điểm hiện tại.

Vì vậy, tôi đã tìm thấy cách được đề cập dưới đây để thực hiện tương tự. Chúng tôi có thể thêm bất kỳ thời lượng (giờ, phút và giây) vào thời điểm hiện tại của chúng tôi theo thời điểm:

var travelTime = moment().add(642, 'seconds').format('hh:mm A');// it will add 642 seconds in the current time and will give time in 03:35 PM format 

var travelTime = moment().add(11, 'mins').format('hh:mm A');// it will add 11 mins in the current time and will give time in 03:35 PM format 

var travelTime = moment().add(2, 'hours').format('hh:mm A');// it will add 2 hours in the current time and will give time in 03:35 PM format 

Nó đáp ứng yêu cầu của tôi. Có thể nó có thể giúp bạn.

+5

Phải là 'phút' không phải trong 'phút'. –

+0

Phải là 'phút' không phải 'phút'. Hoặc ít nhất nó có thể là 'm'. Vui lòng cập nhật câu trả lời của bạn! –

0

Đối với những người có một startTime (như 12h: 30: 30) và (giá trị chỉ trong vài phút như 120) duration, bạn có thể đoán endTime như vậy:

const startTime = '12:30:00'; 
const durationInMinutes = '120'; 

const endTime = moment(startTime, 'HH:mm:ss').add(durationInMinutes, 'minutes').format('HH:mm'); 

// endTime is equal to "14:30" 
Các vấn đề liên quan