Bagaimana cara menambahkan 1 hari ke tanggal sekarang?

93

Saya memiliki objek Tanggal saat ini yang perlu ditambah satu hari menggunakan objek Tanggal JavaScript. Saya memiliki kode berikut ini:

var ds = stringFormat("{day} {date} {month} {year}", { 
                day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
                date: date.getUTCDate(), 
                month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
                year: date.getUTCFullYear() 
});

Bagaimana saya bisa menambahkan satu hari ke dalamnya?

Saya telah menambahkan +1 ke getUTCDay()dan getUTCDate()tetapi tidak menampilkan 'Minggu' untuk day, yang saya perkirakan akan terjadi.

panik panik
sumber
1
Apa yang Anda maksud dengan "tambahkan +1"? Apakah Anda membutuhkan hari berikutnya atau sesuatu yang lain?
Aleks G
Tidak date: (date.getUTCDate()+1)bekerja (bekerja untuk saya)? Ada kemungkinan bahwa ada konflik penamaan dengan date(sebagai Date () - Object dan sebagai Object-Key. Sudahkah Anda mencoba memanggil Date () - Object berbeda?
Dominik Schreiber
saat ini hanya muncul sebagai: <option value = "2012-04-06"> Sab 6 Apr 2012 </option> <option value = "2012-04-07"> 7 Apr 2012 </option>, tidak "Minggu 7 Apr 2012 "
franticfrantic
Jadi bukan yang 7 AprAnda butuhkan (apa itu 'tambahkan hari berikutnya' untuk saya), ini adalah Sunday. Ingatlah untuk menambahkan +1keduanya dalam day:dan date:(atau, seperti yang disebutkan dalam jawaban saat ini, sebelumnya).
Dominik Schreiber

Jawaban:

238

Untuk menambahkan satu hari ke objek tanggal:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);
RobG
sumber
Lihat pertanyaan duplikat: stackoverflow.com/questions/3674539/… . Jawaban ini bagus, tetapi tidak memperhitungkan DST. Ada 2 hari dalam setahun yang tidak memiliki 24 jam.
Jess
2
@ Jess — itu tergantung pada bagaimana Anda ingin perubahan atas DST terwakili. Pertanyaannya menanyakan bagaimana menambahkan satu ke tanggal, itulah yang dilakukan jawaban di atas. Menambahkan 24 jam tidak selalu menaikkan tanggal itu, menambahkan satu jam ke tanggal lokal menggunakan setDate selalu begitu.
RobG
Ini yang saya maksud. Menambah 10 Maret: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();adalah "2013-03-10T23:00:00.000Z". Ini adalah kasus halus di mana fungsi di atas tidak berfungsi untuk saya.
Jess
1
Tentu saja tidak! Anda mulai dengan waktu UTC, lalu konversikan ke lokal, tambahkan hari, lalu ubah kembali ke UTC. Jadi suatu hari ditambahkan ke tanggal lokal , tetapi hanya 23 jam waktu UTC. Jika Anda menambahkan 1 ke tanggal UTC, Anda akan kembali pada 01:00:00 waktu setempat. Perilaku itu tidak unik untuk pergeseran waktu siang hari, ini adalah konsekuensi dari penggunaan tiga zona waktu yang berbeda.
RobG
8
Aha. Saya tidak menyadari getDate mengonversi dari UTC ke waktu lokal. a.setUTCDate(a.getUTCDate() + 1);<- yang sesuai dengan tanggal Zulu.
Jess
40

Menurut pendapat saya, cara terbaik adalah dengan menambahkan satu hari penuh dalam milidetik, tergantung pada bagaimana Anda memfaktorkan kode Anda, itu dapat mengacaukan jika Anda pada hari terakhir bulan itu.

misalnya 28 Feb atau 31 Maret.

Berikut adalah contoh bagaimana saya melakukannya:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms
followingDay.toLocaleDateString();

imo ini menjamin akurasi

berikut adalah contoh lain saya Tidak suka itu bisa bekerja untuk Anda tetapi tidak sebersih dosis di atas

var today = new Date('12/31/2015');
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate()+1);
tomorrow.toLocaleDateString();

imho ini === 'POOP'

Jadi beberapa dari Anda pernah mengeluh tentang pendekatan milidetik saya karena penghematan waktu siang hari. Jadi saya akan menampar ini. Pertama, Beberapa negara dan negara bagian tidak memiliki waktu penghematan siang hari. Penambahan Kedua tepat 24 jam adalah satu hari penuh. Jika dosis nomor tanggal tidak berubah setahun sekali tetapi kemudian diperbaiki 6 bulan kemudian saya tidak melihat masalah di sana. Tetapi untuk tujuan menjadi pasti dan harus berurusan dengan membagikan Tanggal jahat () saya telah memikirkan ini dan sekarang benar-benar membenci Tanggal. Jadi ini Pendekatan baru saya

var dd = new Date(); // or any date and time you care about 
var dateArray =  dd.toISOString().split('T')[0].split('-').concat( dd.toISOString().split('T')[1].split(':') );
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

Sekarang untuk bagian yang menyenangkan!

var date = { 
    day: dateArray[2],
    month: dateArray[1],
    year: dateArray[0],
    hour: dateArray[3],
    minutes: dateArray[4],
    seconds:dateArray[5].split('.')[0],
    milliseconds: dateArray[5].split('.')[1].replace('Z','')
}

sekarang kami memiliki Objek Tanggal Internasional Resmi yang Valid dengan jelas tertulis di meridian Zulu. Sekarang untuk mengubah tanggal

  dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward
  tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it.
Peter si Rusia
sumber
Menambahkan detik / milidetik tidak akan berfungsi untuk penghematan siang hari.
Matt H
@Matt H dari mana kamu mendapatkan ide itu. Waktu diatur dalam UTC dalam milidetik dari 1970/01/01
Peter the Russian
1
Ini akan menjadi hari berikutnya dalam waktu UTC, ya, tetapi tidak harus dalam waktu lokal. Pada hari Musim Semi Maju di AS, ada 25 jam dalam sehari. Jadi, jika Anda memiliki misalnya 31/3/15 pukul 00:00, dan menambahkan 86400000 milidetik, pada hari Sprint Maju, waktu setempat adalah 31/3/15 pukul 23:00 karena ada 25 jam pada hari itu.
Matt H
3
Anda dapat melihat efeknya seperti ini:var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H
1
Ini terlalu direkayasa. Jika Anda mengalami masalah seperti ini, gunakan perpustakaan seperti momen atau sesuatu untuk membantu mempermudah.
Joshua Michael Wagoner
11

Jika Anda ingin menambahkan satu hari (24 jam) ke tanggal waktu saat ini, Anda dapat menambahkan milidetik seperti ini:

new Date(Date.now() + ( 3600 * 1000 * 24))
Pablo Andres Diaz Mazzaro
sumber
9
int days = 1;
var newDate = new Date(Date.now() + days*24*60*60*1000);

CodePen

var days = 2;
var newDate = new Date(Date.now()+days*24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);

Serge
sumber
Penambahan satu hari dalam milidetik gagal karena tidak semua hari memiliki durasi 24 jam di tempat yang menerapkan pergeseran waktu siang hari. Misalnya, Chili mengakhiri waktu musim panas pada tengah malam pada awal 14 Mei 2017. Jam akan kembali mulai dari tengah malam hingga 23:00. Jadi menambahkan 24 jam ke 2017-05-13 00:00:00 akan menghasilkan 2017-05-13 23:00:00, dan tanggalnya tidak berubah (beberapa browser akan melakukannya tepat tengah malam, yang lain satu milidetik setelahnya) . :-(
RobG
2

Terinspirasi oleh jpmottin dalam pertanyaan ini , inilah kode satu barisnya:

var dateStr = '2019-01-01';
var days = 1;

var result = new Date(new Date(dateStr).setDate(new Date(dateStr).getDate() + days));

document.write('Date: ', result); // Wed Jan 02 2019 09:00:00 GMT+0900 (Japan Standard Time)
document.write('<br />');
document.write('Trimmed Date: ', result.toISOString().substr(0, 10)); // 2019-01-02

Semoga ini membantu

Jee Mok
sumber
-3
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');
Paul Wolbers
sumber
Apa ini? Apakah Anda menggunakan perpustakaan?
remborg