Bir ana süre ekleyin (moment.js)


157

An versiyonu: 2.0.0

Belgeleri okuduktan sonra , bunun kolay olacağını düşündüm (Chrome konsolu):

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

Bu önemsiz bir örnek ama işe yarayamıyorum bile. Burada büyük bir şeyi özlediğimi hissediyorum ama gerçekten anlamıyorum. Bu bile işe yaramıyor gibi görünüyor:

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

Herhangi bir yardım çok takdir edilecektir.

Düzenleme: Nihai hedefim, burada çalıştığım gibi bir ikili durum tablosu yapmak: http://bl.ocks.org/phobson/5872894

Gördüğünüz gibi, şu anda bu sorun üzerinde çalışırken kukla x değerleri kullanıyorum.

Yanıtlar:


274

Sanırım dokümantasyonunda önemli bir noktayı kaçırdınız .add()

Zaman ekleyerek orijinal anı değiştirir.

Değişmez sonucu döndüren bir işlev olarak görüyorsunuz. Yapması kolay hata. :)

Dönüş değerini kullanırsanız, bu, başladığınızla aynı gerçek nesnedir. Sadece yöntem zincirleme için bir kolaylık olarak geri döndü.

Anı burada açıklandığı gibi klonlayarak bu davranışı aşabilirsiniz .

Ayrıca, sadece ==test etmek için kullanamazsınız . Her anı aynı çıktıyla biçimlendirebilir ve bunları karşılaştırabilir veya sadece .isSame()yöntemi kullanabilirsiniz .

Kodunuz artık:

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

Cevabın için gerçekten minnettarım Matt. Birçok şeyi temizler. İşte hala kafamı bulamadığım şey: returned_endatenasıl erişeceğimi bildiğim her temsili hala gece yarısında ve 2 am değil. Üzerinde çalıştığım bir D3 grafiği yapabilmem için sabahın 2'sine ihtiyacım var (düzenlenen soruya bakın). Tekrar teşekkürler.
Paul H

14
Emin gibi ekran yöntemlerinden birini çağırmak olun .format()veya .toDate()veya .unix(). Sadece ham ana bakmak pek işe yaramayacaktır. yourmoment.utc().format()Yerel saat yerine utc olarak biçimlendirmek gibi bir şey de yapmak isteyebilirsiniz .
Matt Johnson-Pint

3
Evet, bu anların değişmez olmadığını unutmak sizi arada bir alır. Güzel!
welbornio

33

Canlı rotayı takip ettiğimiz bir uygulama üzerinde çalışıyorum. Yolcu, sürücünün mevcut konumunu ve bulunduğu yere ulaşmak için beklenen varış zamanını göstermek ister. Bu yüzden şimdiki saate biraz süre eklemem gerekiyor.

Ben de aynısını yapmanın aşağıda belirtilen yolunu buldum. Şu anki zamanımıza herhangi bir süre (saat, dakika ve saniye) ekleyebiliriz:

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

Benim ihtiyacımı karşılar. Size yardımcı olabilir.


10
"Dakika" değil, "dakika" olmalıdır.
Tanvi Agarwal

2
"Dakika" değil, "dakika" olmalıdır. Ya da en azından "m" olabilir. Lütfen cevabınızı güncelleyin!
Ulrich Dohou

1
cevabımda zaten 'dakika' ve 'dakika' yerine 'm' kullanabileceğimizden daha önce bahsetmiştim (cevabın yorumlarına bakın). Cevabımı güncellememe gerek olmadığını düşünüyorum.
Mahima Agrawal

7

A startTime(12h: 30: 30 gibi) ve a duration(120 gibi dakika cinsinden değer) olan kişiler için, aşağıdaki endTimegibi tahmin edebilirsiniz :

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"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.