Bir Tarihe 10 saniye ekleme


Yanıtlar:


417

Bir setSecondsyöntem de var:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

Diğer Date işlevlerin bir listesi için MDN'yi kontrol etmelisiniz


setSeconds etrafı saran kılıfları doğru şekilde işleyecek

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05


3
Dikkat edin, Nodejs kurulumum d.getSeconds () işlevini bir dize olarak döndürür. Bunu değiştirmek zorunda kaldım (+ d.getSeconds ()) Tekli artı bir dize bir sayıya dönüştürür. Belki biraz daha belirgin 1 * d.getSeconds ()
tqwhite

1
@tqwhite, düğümde typeof new Date().getSeconds()döner 'number', bu yüzden başka sorunlarınız olabileceğini düşünüyorum (düğümün eski bir sürümü veya başka bir sürümde değilseniz).
zzzzBov

2
d.setSeconds(d.getSeconds() - 92);Yapmayı deneyin ve sonuçta 1'32 yerine 2'32 "fark elde edersiniz. Ancak çözüm ile new Date(d.getTime() - 92*1000);çalışır!
Rafalon

1
Belgelenmemiş davranışa güvenmek (setSeconds (70), dakikaları birer birer artıracak ve saniyeleri 10'a ayarlayacaktır) genellikle kötü bir uygulama gibi görünür. Date.getTime () + <eklenecek milisaniye sayısı> 'yı işaret eden (şu anda sonraki) cevaplar, amaçlanan ve desteklenen yaklaşım gibi görünmektedir ve her birinin belgelenmemiş nüansları ansiklopedik bilgisi olmadan farklı dillerden gelen çoğu programcı için açıktır. belirli bir JavaScript motoru.
Tom Dibble

1
Geçmiş zaman dilimleriyle ilgili bir sorun olabilir, @ Ron'un cevabının altındaki yorumlara bakın: stackoverflow.com/a/17267937/198797 . Muhtemelen ortak bir senaryo değil, yine de bir sorun.
tsemer

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
... ve 10000
eklemenizin

1
Ve timeObject öğesinden önce gelen bir + gereklidir çünkü timeObject öğesini bir sayıya verir. Ron'un cevabında timeObject.getTime () gibi
James

1
JavaScript çok kötü. Bu ilk API'ler biraz bozuk.
usr

63

Sadece aramızdaki performans manyakları için.

getTime

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5.196.949 Ops / sn, en hızlı


setSeconds

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2.936.604 Ops / sn,% 43 daha yavaş


moment.js

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22.549 Ops / sn,% 100 daha yavaş


Bu yüzden belki de en az insan tarafından okunabilir (o kadar da kötü değil) ama en hızlı yol :)

jspref çevrimiçi testleri


3
Detaylar için teşekkürler, çok faydalı :)
Dean

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Ayrıca lütfen bakınız: Bir JavaScript Tarihi nesnesine 30 dakika nasıl eklenir?


7
buradaki tüm yanlış cevaplar için doğru olan budur.
Cory Mawhorter

Evet, doğru cevap bu. Maalesef Google, "javascript tarih ekleme saniye" araması yapıyorsa ve en çok oy verilen cevap yanlışsa bu Soruya atıfta bulunuyor.
Philipp Gächter

2
Herkes seçilen cevabın (şu anda @zzzzBov'dan) ne yaptığını açıklayabilir mi? Benim için çalışıyor.
tsemer

1
@tsemer, ilk bakışta zzzzBov'un cevabının doğru olmadığını düşündüm, çünkü aralık dışındaysa dakika değerini güncelleyeceğini düşünmemiştim. Ancak "zorlu" göreviniz yüzünden MDN'yi inceledim ve cevabın kesinlikle doğru olduğunu onayladım. :)
Ron

1
@tsemer Geçmiş Zaman Dilimi desteğiyle bir web tarayıcısında deneyin (örneğin Internet Explorer 11): Ayrıca sistem TimeZone'unuzu "Asia / Yekaterinburg" olarak ayarlayın:var timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
4esn0k

9

Bunu dene

a = new Date();
a.setSeconds(a.getSeconds() + 10);


3

Birkaç yeni varyantım var

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);

2

Date()Javascript nesne gerçekten akıllı değildir.

Sadece saniye eklemeye odaklanırsanız, işleri sorunsuz bir şekilde ele alırsınız, ancak X saniye sayısını eklemeye çalışırsanız Date, sorunla karşılaştığınız nesneye X dakika ve saat sayısı vb . Ekleyin. Bu yüzden sadece setSeconds()yöntemi kullanarak ve verilerimi saniyeye dönüştürerek (ki iyi çalıştı) geri düştü .

Herkes Date()tüm set yöntemlerini kullanarak küresel bir nesneye zaman ekleme gösterebilir ve son kez doğru dışarı çıkmak varsa bunu görmek istiyorum ama belirli bir Date()nesne üzerinde bir anda bir set yöntemi kullanılacak anlamını alıyorum ve onları karıştırmak dağınıklığa yol açar.

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

İşte size yardımcı olabilecek bazı belgeler :


2
  1. setSecondsbugünden saniye alıp içine 10 saniye ekleyerek yöntemi kullanabilirsiniz

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Yeni tarihe 10 * 1000 milisaniye ekleyebilirsiniz:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Şunları kullanabilirsiniz setTime:

    today.setTime(now.getTime() + 10000)

1

Bu şekilde dene.

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

Sadece arayın ve atayın new Date().addSeconds(10)

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.