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?
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?
Jawaban:
Tiga opsi untuk Anda:
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:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Ini berfungsi bahkan untuk hari terakhir dalam sebulan (atau setahun), karena objek tanggal JavaScript pintar tentang rollover:
(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.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Waspadalah yang add
memodifikasi instance yang Anda panggil, alih-alih mengembalikan instance baru, jadi today.add(1, 'days')
akan memodifikasi today
. Itu sebabnya kami mulai dengan op kloning aktif var tomorrow = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
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 kemudian new Date(ms)
). Namun berhati-hatilah, itu bisa bervariasi dari peramban ke peramban. Sampai saat ini, implementasi dapat melakukan apa saja yang mereka inginkan Date.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 sama Date
tiga kali dalam array. Jika Anda ingin tiga Date
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)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
new Date("2009-09-11")
tetapi Firefox tidak. Saya pikir sebagian besar browser menerima new Date("2009/09/11")
solusi yang mudah var 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 di m-1
sini, karena bulan javascript adalah nilai enum (Januari menjadi 0, bukan 1), dan d+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:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Berikut adalah tes yang saya gunakan untuk menguji fungsi:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
Cara termudah adalah dengan mengkonversi ke milidetik dan tambahkan 1000 * 60 * 60 * 24 milidetik misalnya:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
tetapi sebenarnya mirip dengan getTime()
/ setTime()
, sungguh.
new Date(Date.now()+1000*60*60*24);
Pertama-tama Anda harus mengurai string Anda sebelum mengikuti saran orang lain:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Jika Anda ingin kembali dalam format yang sama lagi, Anda harus melakukannya "secara manual":
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
Tapi saya sarankan mendapatkan Date.js seperti yang disebutkan dalam balasan lain, yang akan membantu Anda banyak .
Saya merasa bahwa tidak ada yang lebih aman daripada .getTime()
dan .setTime()
, jadi ini harus menjadi yang terbaik, dan berkinerja juga.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
untuk Tanggal tidak valid (seperti 31 +1) terlalu berbahaya, dan itu tergantung pada implementasi browser.
Mendapatkan 5 hari ke depan:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
Dua metode:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2: Mirip dengan metode sebelumnya
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
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.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Contoh
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Hasil
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
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):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Hasil:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Menambahkan satu Jam ke tanggal, akan membuatnya bekerja dengan sempurna (tetapi tidak menyelesaikan masalah).
$date = new Date(2014, 9, 16,0,1,1);
Hasil:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
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.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
Menambahkan tahun tanggal dengan vanilla js:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
Untuk berjaga-jaga jika seseorang ingin menambah nilai selain tanggal (hari)
Melalui JS asli, untuk menambah satu hari Anda dapat melakukan hal berikut:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Pilihan lain adalah menggunakan moment
perpustakaan:
const date = moment().add(14, "days").toDate()
Penambahan tanggal sadar zona waktu / siang hari untuk tanggal JavaScript:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}