Jawaban:
Anda dapat membuatnya dengan: -
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = new Date();
alert(date.addDays(5));
Ini menangani penambahan bulan secara otomatis jika perlu. Sebagai contoh:
8/31 + 1 hari akan menjadi 9/1 .
Masalah dengan menggunakan setDate
secara langsung adalah bahwa itu adalah mutator dan hal semacam itu sebaiknya dihindari. ECMA melihat cocok untuk diperlakukan Date
sebagai kelas yang bisa berubah daripada struktur yang tidak berubah.
864E5
untuk beberapa alasan saya lebih suka menulis 24*60*60
dalam kode saya :)
Jawaban yang benar :
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Jawaban yang salah :
Jawaban ini terkadang memberikan hasil yang benar tetapi sangat sering mengembalikan tahun dan bulan yang salah. Satu-satunya waktu jawaban ini bekerja adalah ketika tanggal yang Anda tambahkan hari akan memiliki tahun dan bulan saat ini.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Bukti / Contoh
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Hati-hati, karena ini bisa rumit. Saat menetapkan "besok", itu hanya berfungsi karena nilainya saat ini cocok dengan tahun dan bulan untuk "hari ini". Namun, pengaturan ke nomor tanggal seperti "32" biasanya masih berfungsi dengan baik untuk memindahkannya ke bulan berikutnya.
var d = new Date(); d.setDate( d.getDate() + 1 );
?
getDate()
kembalikan hari tahun itu . Kemudian, panggilan setDate
menentukan hari di tahun berjalan . Jadi ini BUKAN solusi umum yang baik. Jawaban @ AnthonyWJones sebenarnya bekerja dengan benar.
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
memberi 3 Jan 2017 yang melintasi 2 tahun.
Solusi sederhana saya adalah:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
solusi ini tidak memiliki masalah dengan waktu musim panas. Juga, seseorang dapat menambahkan / mengganti offset apa pun selama bertahun-tahun, bulan, hari, dll.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
adalah kode yang benar.
setDate
.
Jawaban ini sepertinya membingungkan bagi saya, saya lebih suka:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () memberi kita milidetik sejak 1970, dan 86400000 adalah jumlah milidetik dalam sehari. Karenanya, ms berisi milidetik untuk tanggal yang diinginkan.
Menggunakan konstruktor milidetik memberikan objek tanggal yang diinginkan.
new Date(new Date('11/4/2012').getTime() + 86400000)
Mencoba
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Menggunakan setDate () untuk menambahkan tanggal tidak akan menyelesaikan masalah Anda, coba tambahkan beberapa hari ke bulan Februari, jika Anda mencoba menambahkan hari baru ke dalamnya, itu tidak akan menghasilkan apa yang Anda harapkan.
setDate()
? Apakah ini: stackoverflow.com/questions/5497637/...
Hanya menghabiskan waktu bertahun-tahun untuk mencari tahu apa yang terjadi dengan tahun yang tidak ditambahkan ketika mengikuti contoh utama di bawah ini.
Jika Anda hanya ingin menambahkan n hari ke tanggal yang Anda miliki, yang terbaik adalah:
myDate.setDate (myDate.getDate () + n);
atau versi jangka panjang
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Ini hari ini / besok membingungkan. Dengan mengatur tanggal saat ini ke variabel tanggal baru Anda, Anda akan mengacaukan nilai tahun. jika Anda bekerja dari tanggal semula, Anda tidak akan melakukannya.
Jika Anda bisa, gunakan moment.js . JavaScript tidak memiliki metode tanggal / waktu asli yang sangat bagus. Berikut ini adalah contoh sintaks Moment:
var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
Referensi: http://momentjs.com/docs/#/manipulating/add/
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);
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);
Saya membuat ekstensi ini tadi malam:
Anda dapat memberikan nilai positif atau negatif;
contoh:
var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);
Date.prototype.addDays = function (num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}
Date.prototype.addSeconds = function (num) {
var value = this.valueOf();
value += 1000 * num;
return new Date(value);
}
Date.prototype.addMinutes = function (num) {
var value = this.valueOf();
value += 60000 * num;
return new Date(value);
}
Date.prototype.addHours = function (num) {
var value = this.valueOf();
value += 3600000 * num;
return new Date(value);
}
Date.prototype.addMonths = function (num) {
var value = new Date(this.valueOf());
var mo = this.getMonth();
var yr = this.getYear();
mo = (mo + num) % 12;
if (0 > mo) {
yr += (this.getMonth() + num - mo - 12) / 12;
mo += 12;
}
else
yr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);
value.setYear(yr);
return value;
}
Tanpa menggunakan variabel kedua, Anda dapat mengganti 7 dengan x hari berikutnya:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
untuk mengurangi 30 hari gunakan (24 jam = 86400000 ms)
new Date(+yourDate - 30 *86400000)
Solusi paling sederhana.
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + parseInt(days));
return this;
};
// and then call
var newDate = new Date().addDays(2); //+2 days
console.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 days
console.log(newDate1);
Terima kasih Jason atas jawaban Anda yang berfungsi seperti yang diharapkan, berikut adalah campuran dari kode Anda dan format praktis dari AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Terlambat ke pesta, tetapi jika Anda menggunakannya ada plugin yang sangat bagus bernama Moment:jQuery
maka
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
Dan banyak hal baik lainnya di sana!
Sunting: referensi jQuery dihapus berkat komentar aikeru
Solusi yang dirancang untuk operator pipa :
const addDays = days => date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
Pemakaian:
// Without the pipeline operator...
addDays(7)(new Date());
// And with the pipeline operator...
new Date() |> addDays(7);
Jika Anda membutuhkan lebih banyak fungsi, saya sarankan melihat ke perpustakaan tanggal-fns .
Lama saya tahu, tetapi kadang-kadang saya suka ini:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
Saya memiliki masalah dengan penghematan waktu siang hari dengan solusi yang diusulkan.
Dengan menggunakan getUTCDate
/ setUTCDate
sebaliknya, saya memecahkan masalah saya.
// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
// Make a working copy so we don't mutate the supplied date.
const d = new Date(date);
d.setUTCDate(d.getUTCDate() + num);
return d;
}
Anda dapat menggunakan JavaScript, tidak perlu jQuery:
var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);
Formatting to dd/mm/yyyy :
var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();
var someFormattedDate = dd + '/'+ mm + '/'+ y;
Prototipe generik tanpa variabel, ini berlaku pada nilai Tanggal yang ada:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
Dokumen mozilla untuk setDate () tidak menunjukkan bahwa ia akan menangani skenario akhir bulan. Lihat https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
Atur tanggal()
Itu sebabnya saya menggunakan setTime () ketika saya perlu menambahkan hari.
Sesederhana ini:
new Date((new Date()).getTime() + (60*60*24*1000));
Saya kira saya akan memberikan jawaban juga:
Secara pribadi, saya suka mencoba menghindari deklarasi variabel serampangan, panggilan metode, dan panggilan konstruktor, karena semuanya mahal pada kinerja. (tentu saja, dengan alasan)
saya akan meninggalkan ini hanya sebagai komentar di bawah Jawaban yang diberikan oleh @AnthonyWJones tetapi berpikir lebih baik dari itu.
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setTime( 864E5 * days + this.valueOf() ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setTime( 864E5 * days + date.valueOf() ) && date;
};
Di atas akan menghormati DST. Berarti jika Anda menambahkan beberapa hari yang melewati DST, waktu (jam) yang ditampilkan akan berubah untuk mencerminkannya.
Contoh:
2 Nov 2014 02:00 adalah akhir dari DST.
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00
Jika Anda ingin mempertahankan waktu melintasi DST (jadi 10:30 masih akan menjadi 10:30) ...
// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
return this.setDate( this.getDate() + days ) && this;
};
// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
// Basic Function declaration...
function addDaysToDate( date, days ) {
return date.setDate( date.getDate() + days ) && date;
};
Jadi, sekarang kamu sudah ...
var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt ); // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00
Tidak, javascript tidak memiliki fungsi bawaan, tetapi Anda dapat menggunakan baris kode sederhana
timeObject.setDate(timeObject.getDate() + countOfDays);
Saya menggunakan sesuatu seperti:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Bekerja dengan menghemat waktu:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Bekerja dengan tahun baru:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Itu dapat parametrized:
function DateAdd(source, amount, step) {
var factor = 1;
if (step == "day") factor = 24 * 60 * 60 * 1000;
else if (step == "hour") factor = 60 * 60 * 1000;
...
new Date(source.getTime() + amount * factor);
}
Saya menggunakan solusi berikut.
var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);
Date memiliki konstruktor yang menerima int. Argumen ini mewakili total milidetik sebelum / setelah 1 Januari 1970. Argumen ini juga memiliki metode setTime yang melakukan hal yang sama tanpa membuat objek Date yang baru.
Apa yang kami lakukan di sini adalah mengonversi hari menjadi milidetik dan menambahkan nilai ini ke nilai yang diberikan oleh getTime. Akhirnya, kami memberikan hasilnya kepada konstruktor Date (milidetik) atau metode setTime (milidetik).
now.setDate(now.getDate() + days);
secara otomatis menangani perubahan DST. Dan saya harus memperbaiki, lompatan detik diabaikan dalam cap waktu JS.
Sunting:
Alih-alih setTime()
(atau setHours()
) Anda bisa melakukannya dengan cara ini:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Tua:
Alih-alih menggunakan setTime()
Anda dapat menggunakan setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Lihat JSFiddle ...
d.setDate(d.getDate() + 1);
Kode yang sangat sederhana untuk menambahkan tanggal dalam skrip java.
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);
Ada metode setDate dan getDate , yang memungkinkan Anda melakukan sesuatu seperti ini:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Jika Anda ingin mengurangi beberapa hari dan memformat tanggal Anda dalam format yang dapat dibaca manusia, Anda harus mempertimbangkan untuk membuat DateHelper
objek kustom yang terlihat seperti ini:
var DateHelper = {
addDays : function(aDate, numberOfDays) {
aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
return aDate; // Return the date
},
format : function format(date) {
return [
("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes
("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes
date.getFullYear() // Get full year
].join('/'); // Glue the pieces together
}
}
// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
(Lihat juga Fiddle ini )
Memperluas prototipe dalam javascript mungkin bukan ide yang baik , terutama dalam basis kode profesional.
Apa yang ingin Anda lakukan adalah memperluas Date
kelas asli :
class MyCustomDate extends Date {
addDays(days) {
const date = new MyCustomDate(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)
Dengan cara ini, jika suatu hari Javascript mengimplementasikan addDays
metode asli , Anda tidak akan merusak apa pun.
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};