web-dev-qa-db-ja.com

瞬間に期間を追加する(moment.js)

現在のバージョン:2.0.0

ドキュメントを読んだ後に 、私はこれは簡単であると思いました(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値を使用しています。

112
Paul H

.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
220
Matt Johnson

私たちはライブルートを追跡するアプリケーションに取り組んでいます。乗客は、運転手の現在位置と到着予定時刻を見せたいと思っています。だから私は現在の時間にいくつかの期間を追加する必要があります。

だから私は同じことをするために下記の方法を見つけました。現在の時間には、時間(時、分、秒)を少しでも追加できます。

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

それは私の要求を満たします。それはあなたを助けることができるかもしれません。

20
Mahima Agrawal

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"
3
Made in Moon