Tambahkan 10 detik ke Tanggal

253

Bagaimana saya bisa menambahkan 10 detik ke objek tanggal JavaScript?

Sesuatu seperti ini:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;
George
sumber
4
Atau jika Anda ingin melakukannya melalui konstruktor - Tanggal baru (Tanggal baru (). GetTime () + 10000)
John Strickler

Jawaban:

416

Ada setSecondsmetode juga:

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

Untuk daftar fungsi lainnya Date , Anda harus memeriksa MDN


setSeconds akan menangani dengan benar kasus bungkus:

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

zzzzBov
sumber
3
Hati-hati, instalasi Nodejs saya mengembalikan d.getSeconds () sebagai string. Saya harus mengubah ini menjadi (+ d.getSeconds ()) The unary plus mengubah string menjadi angka. Mungkin sedikit lebih jelas adalah 1 * d.getSeconds ()
tqwhite
1
@tqwhite, typeof new Date().getSeconds()kembali 'number'dalam node, jadi saya pikir Anda mungkin memiliki masalah lain (kecuali jika Anda berada pada versi node yang usang atau sesuatu).
zzzzBov
2
Coba lakukan d.setSeconds(d.getSeconds() - 92);dan Anda akan berakhir dengan 2'32 "perbedaan bukan 1'32". Solusi dengan new Date(d.getTime() - 92*1000);bekerja namun!
Rafalon
1
Mengandalkan perilaku tidak berdokumen (bahwa setSeconds (70) akan menambah menit dengan satu dan menetapkan detik ke 10) sepertinya praktik yang umumnya buruk. Jawaban (saat ini berikutnya) menunjuk ke Date.getTime () + <jumlah milidetik untuk ditambahkan> tampaknya merupakan pendekatan yang dimaksudkan dan didukung, dan akan menjadi jelas bagi sebagian besar programmer yang berasal dari bahasa yang berbeda tanpa pengetahuan ensiklopedis dari nuansa tidak berdokumen dari masing-masing mesin JavaScript tertentu.
Tom Dibble
1
Masalah dapat terjadi dengan zona waktu historis, lihat komentar di bawah jawaban @ Ron: stackoverflow.com/a/17267937/198797 . Mungkin bukan skenario umum tetapi masalah tetap saja.
tsemer
110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);
4esn0k
sumber
33
... dan alasan Anda menambahkan 10000 adalah karena tanggal Javascript bekerja dalam milidetik, yaitu 10000 = 10 * 1000
psiphi75
1
Dan + sebelum timeObject diperlukan karena melemparkan timeObject ke angka. Jadi seperti timeObject.getTime () dalam jawaban Ron
James
1
JavaScript sangat buruk. API awal ini agak kacau.
usr
62

Hanya untuk para maniak kinerja di antara kita.

getTime

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

5.196.949 Ops / dtk, tercepat


setSeconds

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

2.936.604 Ops / dtk, 43% lebih lambat


moment.js

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

22.549 Ops / dtk, 100% lebih lambat


Jadi mungkin itu yang paling tidak dapat dibaca manusia (tidak seburuk itu) tetapi cara tercepat :)

tes online jspref

Danpe
sumber
3
Terima kasih atas perinciannya, sangat berguna :)
Dean
58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Silakan juga merujuk: Bagaimana cara menambahkan 30 menit ke objek Tanggal JavaScript?

Ron
sumber
7
dari semua jawaban yang salah di sini, ini adalah jawaban yang benar.
Cory Mawhorter
Ya, ini jawaban yang benar. Sayangnya Google merujuk ke Pertanyaan ini jika mencari "tanggal javascript tambahkan detik" dan jawaban yang paling banyak dipilih salah.
Philipp Gächter
2
Adakah yang bisa menjelaskan jawaban yang dipilih (saat ini dari @zzzzBov) yang salah? Ini bekerja untuk saya.
tsemer
1
@tsemer, pada pandangan pertama, saya pikir jawaban zzzzBov tidak benar, karena saya tidak berpikir itu akan memperbarui nilai menit jika berada di luar jangkauan. Tetapi karena "tantangan" Anda, saya meninjau MDN, dan memastikan bahwa jawabannya benar. :)
Ron
1
@tsemer Coba di browser web dengan dukungan Historical TimeZones (Internet Explorer 11, misalnya): Juga atur sistem TimeZone Anda ke "Asia / Yekaterinburg":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

Coba ini

a = new Date();
a.setSeconds(a.getSeconds() + 10);
lostyzd
sumber
4
timeObject.setSeconds(timeObject.getSeconds() + 10)
Tomasz Nurkiewicz
sumber
4

Saya punya beberapa varian baru

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

The Date()objek dalam javascript tidak terlalu pintar benar-benar.

Jika Anda hanya fokus untuk menambahkan detik tampaknya menangani hal-hal dengan lancar tetapi jika Anda mencoba untuk menambahkan X jumlah detik kemudian tambahkan X jumlah menit dan jam, dll, ke Dateobjek yang sama Anda berakhir dalam masalah. Jadi saya hanya kembali ke hanya menggunakan setSeconds()metode dan mengubah data saya menjadi detik (yang berfungsi dengan baik).

Jika ada yang bisa mendemonstrasikan menambahkan waktu ke Date()objek global menggunakan semua metode yang ditetapkan dan memiliki waktu akhir keluar dengan benar, saya ingin melihatnya tetapi saya mendapatkan pengertian bahwa satu set metode harus digunakan pada suatu waktu pada Date()objek yang diberikan dan mencampurnya menyebabkan kekacauan.

var vTime = new Date();

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

vTime.setSeconds(iSecondsToAdd);

Berikut ini beberapa dokumentasi yang dapat membantu :

coding_is_fun
sumber
2
  1. Anda dapat menggunakan setSecondsmetode dengan mendapatkan detik dari hari ini dan hanya menambahkan 10 detik di dalamnya

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Anda dapat menambahkan 10 * 1000 milidetik ke tanggal baru:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Anda bisa menggunakan setTime:

    today.setTime(now.getTime() + 10000)
Javed IN
sumber
1

Coba dengan cara ini.

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

Panggil saja dan tetapkan new Date().addSeconds(10)

Ikram - Ud - Daula
sumber