순간에 기간 추가 (moment.js)


149

순간 버전 : 2.0.0

docs를 읽은 후 이것이 간단하다고 생각했습니다 (Chrome 콘솔).

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]…}

이것은 사소한 예이지만 작동조차 할 수 없습니다. 나는 여기에 큰 것을 놓친 것처럼 느껴지지만 실제로는 얻지 못합니다. 이것조차도 작동하지 않는 것 같습니다.

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]…}

도움을 주시면 감사하겠습니다.

편집 : 내 최종 목표는 내가 작업중 인 것과 같은 이진 상태 차트를 만드는 것입니다 : http://bl.ocks.org/phobson/5872894

보시다시피, 현재이 문제를 해결하는 동안 더미 x 값을 사용하고 있습니다.

답변:


264

나는 당신이 문서의 요점을 놓쳤다 고 생각합니다. .add()

시간을 추가하여 원래 순간을 음소거합니다.

불변의 결과를 반환하는 함수로 취급하는 것 같습니다. 쉬운 실수. :)

리턴 값을 사용하는 경우 시작한 것과 동일한 실제 오브젝트입니다. 메소드 체인의 편의상 방금 리턴되었습니다.

여기에 설명 된대로 순간을 복제하여이 동작을 해결할 수 있습니다 .

또한 ==테스트하는 데만 사용할 수는 없습니다 . 각 순간을 동일한 출력으로 형식화하여 비교하거나 .isSame()방법을 사용할 수 있습니다 .

귀하의 코드는 다음과 같습니다.

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

응답이 정말 감사합니다, 매트 그것은 많은 것들을 정리합니다. 여기에 여전히 머리를 get 수없는 returned_endate것이 있습니다. 접근 방법을 알고있는 모든 표현은 오전 2 시가 아니라 자정에 있습니다. 작업중인 D3 차트를 만들 수 있도록 오전 2 시가되어야합니다 (편집 된 질문 참조). 다시 감사합니다.
Paul H

14
반드시 같은 표시 방법 중 하나 전화를 확인 .format()하거나 .toDate()또는 .unix(). 원시 순간을 보는 것만으로는 잘 작동하지 않습니다. yourmoment.utc().format()현지 시간 대신 utc로 형식화하는 것과 같은 작업을 원할 수도 있습니다 .
Matt Johnson-Pint

3
네,이 순간들이 불변이 아니라는 것을 잊어 버리는 것은 가끔씩 한 번에 이루어집니다. 좋은!
welbornio

30

실시간 경로를 추적하는 응용 프로그램을 만들고 있습니다. 승객은 운전자의 현재 위치와 예상 도착 시간을 자신의 위치에 표시하려고합니다. 따라서 현재 시간에 약간의 지속 시간을 추가해야합니다.

그래서 아래에서 언급 한 방식으로 동일한 작업을 수행했습니다. 현재 시간에 모든 시간 (시간, 분 및 초)을 순간별로 추가 할 수 있습니다.

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, 'minutes').format('hh:mm A');// it will add 11 mins in the current time and will give time in 03:35 PM format; can use m or minutes 

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

내 요구 사항을 충족시킵니다. 도움이 될 수 있습니다.


9
'분'이 아닌 '분'이어야합니다.
Tanvi Agarwal

2
'분'이 아닌 '분'이어야합니다. 또는 적어도 'm'일 수 있습니다. 답변을 업데이트하십시오!
Ulrich Dohou

1
그것은 이미 내 대답에 '분'이며 '분'대신 'm'을 사용할 수 있다고 언급했습니다 (답변 주석 참조). 내 대답을 업데이트 할 필요가 없다고 생각합니다.
Mahima Agrawal

6

startTime(12h : 30 : 30과 같은) 및 duration(120과 같은 분 단위의 값 )을 가진 사람들의 경우 다음 endTime과 같이 추측 할 수 있습니다 .

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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.