1. ホーム
  2. javascript

[解決済み] モーメントにデュレーションを追加する (moment.js)

2022-04-23 18:30:16

質問

モーメントバージョン: 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値を使用しています。

どのように解決するのですか?

のドキュメントで重要なポイントを見逃しているようです。 .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