193

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

4

3 に答える 3

311

のドキュメントの重要なポイントを見逃したと思います.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
于 2013-06-27T04:13:15.673 に答える