Saya perlu menambah nilai tanggal satu hari di JavaScript.
Misalnya, saya memiliki nilai tanggal 2010-09-11 dan saya harus menyimpan tanggal hari berikutnya dalam variabel JavaScript.
Bagaimana saya bisa meningkatkan tanggal dengan sehari?
javascript
date
datetime
Santanu
sumber
sumber
Jawaban:
Tiga opsi untuk Anda:
1. Menggunakan objek JavaScript saja
Date
(tidak ada perpustakaan):Jawaban saya sebelumnya untuk # 1 salah (bertambah 24 jam, gagal memperhitungkan transisi ke dan dari waktu musim panas; Manusia Pintar menunjukkan bahwa itu akan gagal pada 7 November 2010 di zona waktu Timur). Sebaliknya, jawaban Jigar adalah cara yang benar untuk melakukan ini tanpa perpustakaan:
Ini berfungsi bahkan untuk hari terakhir dalam sebulan (atau setahun), karena objek tanggal JavaScript pintar tentang rollover:
Tampilkan cuplikan kode
(Jawaban ini saat ini diterima, jadi saya tidak bisa menghapusnya. Sebelum diterima saya menyarankan kepada OP mereka menerima Jigar, tapi mungkin mereka menerima yang ini untuk item # 2 atau # 3 dalam daftar.)
2. Menggunakan MomentJS :
(Waspadalah yang
add
memodifikasi instance yang Anda panggil, alih-alih mengembalikan instance baru, jaditoday.add(1, 'days')
akan memodifikasitoday
. Itu sebabnya kami mulai dengan op kloning aktifvar tomorrow = ...
.)3. Menggunakan DateJS , tetapi belum diperbarui dalam waktu yang lama:
sumber
Date
konstruktor (new Date(year, month, date)
); lihat bagian 15.9.2.1 dari spesifikasi ; jika Anda ingin menerima berbagai format, pasti lihat DateJS .Date.parse
(yang mengembalikan sejumlah milidetik yang bisa Anda masukkan kemudiannew Date(ms)
). Namun berhati-hatilah, itu bisa bervariasi dari peramban ke peramban. Sampai saat ini, implementasi dapat melakukan apa saja yang mereka inginkanDate.parse
. Spesifikasi edisi 5 baru sekarang memiliki format minimum yang harus diterima, tetapi saya belum akan mengandalkan itu.x = new Date(); x2 = new Date(x.getTime() + 1000)
, di mana 1000 adalah peningkatan milidetik.Date
objek bisa berubah. Anda menyimpan objek yang samaDate
tiga kali dalam array. Jika Anda ingin tigaDate
objek berbeda , Anda harus membuat tiga objek:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
sumber
new Date("2009-09-11")
tetapi Firefox tidak. Saya pikir sebagian besar browser menerimanew Date("2009/09/11")
solusi yang mudahvar arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.-
dengan/
dan berharap bahwa browser akan menerimanya, akan membagi string menjadi beberapa bagian:var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Perhatikan bahwa kami menggunakan dim-1
sini, karena bulan javascript adalah nilai enum (Januari menjadi 0, bukan 1), dand+1
karena kami sedang melakukan penambahan sudah dalam tugas awal (itu akan secara otomatis mengoreksi untuk 29 Februari, dll)Tidak ada satu pun contoh dalam jawaban ini yang berfungsi pada hari penyesuaian Daylight Saving Time. Pada hari-hari itu, jumlah jam dalam sehari bukanlah 24 (mereka 23 atau 25, tergantung pada apakah Anda "melompat maju" atau "mundur".)
Fungsi javascript AddDays di bawah ini menyumbang waktu musim panas:
Berikut adalah tes yang saya gunakan untuk menguji fungsi:
sumber
Cara termudah adalah dengan mengkonversi ke milidetik dan tambahkan 1000 * 60 * 60 * 24 milidetik misalnya:
sumber
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
tetapi sebenarnya mirip dengangetTime()
/setTime()
, sungguh.new Date(Date.now()+1000*60*60*24);
Besok dalam satu baris di JS murni tapi jelek !
Inilah hasilnya:
sumber
Pertama-tama Anda harus mengurai string Anda sebelum mengikuti saran orang lain:
Jika Anda ingin kembali dalam format yang sama lagi, Anda harus melakukannya "secara manual":
Tapi saya sarankan mendapatkan Date.js seperti yang disebutkan dalam balasan lain, yang akan membantu Anda banyak .
sumber
Saya merasa bahwa tidak ada yang lebih aman daripada
.getTime()
dan.setTime()
, jadi ini harus menjadi yang terbaik, dan berkinerja juga..setDate()
untuk Tanggal tidak valid (seperti 31 +1) terlalu berbahaya, dan itu tergantung pada implementasi browser.sumber
Mendapatkan 5 hari ke depan:
sumber
Dua metode:
1:
2: Mirip dengan metode sebelumnya
sumber
Dapatkan nilai string tanggal menggunakan metode dateObj.toJSON () Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Potong tanggal dari yang dikembalikan nilai dan kemudian bertambah dengan jumlah hari yang Anda inginkan.
sumber
Contoh
Hasil
sumber
Tidak sepenuhnya yakin apakah itu BUG (Diuji Firefox 32.0.3 dan Chrome 38.0.2125.101), tetapi kode berikut akan gagal di Brasil (-3 GMT):
Hasil:
Menambahkan satu Jam ke tanggal, akan membuatnya bekerja dengan sempurna (tetapi tidak menyelesaikan masalah).
Hasil:
sumber
Menghasilkan representasi string tanggal besok. Gunakan Date () baru untuk mendapatkan tanggal hari ini, tambahkan satu hari menggunakan Date.getDate () dan Date.setDate (), dan ubah objek Date menjadi string.
sumber
Menambahkan tahun tanggal dengan vanilla js:
Untuk berjaga-jaga jika seseorang ingin menambah nilai selain tanggal (hari)
sumber
Melalui JS asli, untuk menambah satu hari Anda dapat melakukan hal berikut:
Pilihan lain adalah menggunakan
moment
perpustakaan:sumber
Penambahan tanggal sadar zona waktu / siang hari untuk tanggal JavaScript:
sumber