2013-06-27 4 views
70

モーメントバージョンを期間を追加します。(moment.js)瞬間に

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

これは簡単です:

After reading the docs 2.0.0は、私は、これは(クロームコンソール)ストレートフォワードだろうと思いましたしかし、私はそれを動作させることさえできません。私はここに大きなものを見逃しているように感じるが、実際にはそれを得ていない。これでも動作していないようです:

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

何か助けていただければ幸いです。

編集: 私の最終目標は、私がここで働いているようなバイナリステータスチャートを作ることです:あなたが見ることができるように、私は現在ながら、ダミーのx値を使用してい http://bl.ocks.org/phobson/5872894

私はこの問題に取り組んでいます。

答えて

153

は、私はあなたが時間を追加することにより、.add()

変異し、元の瞬間のためにドキュメントの重要なポイントを逃したと思います。

あなたは不変の結果を返す関数として扱っているようです。簡単に間違いを作る。 :)

戻り値を使用する場合は、開始したものと同じ実際のオブジェクトです。メソッド連鎖の便宜のために返されたばかりです。

瞬間を複製することでこの現象を回避することができますas described here

また、==を使用してテストすることはできません。それぞれの瞬間を同じ出力にフォーマットして比較することもできますし、.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 
+0

私は本当に応答、マットに感謝しています。それは多くのものをクリアする。ここで私はまだ頭を奪うことができません:私がアクセスする方法を知っている 'returned_endate'のすべての表現は、真夜中であり、2時ではありません。私はそれが私が働いているD3のチャートを作ることができるように午前2時に必要です(編集された質問を参照)。再度、感謝します。 –

+8

'.format()'や '.toDate()'や '.unix()'のような表示メソッドを呼び出すことを確認してください。生の瞬間を見るだけではうまくいきません。現地時間の代わりにutcとしてフォーマットするには 'yourmoment.utc()。format()'のようなことをしたいかもしれません。 –

+2

ええ、これらの瞬間が不変ではないことを忘れていると、たまには一度もそうなりません。ニース! – welbornio

6

。乗客は運転手の現在の位置と、彼/彼女の所在地に到達する予定到着時間を表示したい。だから私は現在の時間にいくつかの期間を追加する必要があります。

私は同じことをする以下の方法を見つけました。 我々は現時点で私たちの現在の時刻に任意の時間(時、分、秒)を追加することができます

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 

それは私の要件を満たしています。それがあなたを助けることができるかもしれません。 startTime(:30:12時間のような30)を有する人々のために

+5

「分」ではなく、「分」でなければなりません。 –

+0

「分」ではなく「分」でなければなりません。または少なくともそれは 'm'になることができます。あなたの答えを更新してください! –

0

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"