Yanıtlar:
Şunlarla bir tane oluşturabilirsiniz: -
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));
Bu, gerekirse ayın otomatik olarak artırılmasını sağlar. Örneğin:
8/31 + 1 gün 9/1 olacak .
setDate
Doğrudan kullanımdaki sorun , bunun bir mutatör olması ve bu tür şeylerden en iyi şekilde kaçınılmasıdır. ECMA, Date
değişmez bir yapıdan ziyade değişebilir bir sınıf olarak muamele etmek için uygun gördü .
864E5
nedense 24*60*60
kodumu yazmayı tercih ederim :)
Doğru Yanıt :
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Yanlış Yanıt :
Bu cevap bazen doğru sonucu verir, ancak çoğu zaman yanlış yıl ve ay döndürür. Bu cevabın işe yaradığı tek zaman, gün eklediğiniz tarihin o yıl ve aya sahip olacağı zamandır.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
İspat / Örnek
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Dikkatli olun, çünkü bu zor olabilir. "Yarın" ayarlanırken, yalnızca geçerli değeri "bugün" için yıl ve ayla eşleştiği için çalışır. Bununla birlikte, normalde "32" gibi bir tarih numarasına ayarlamak, bunu bir sonraki aya taşımak için hala iyi olacaktır.
var d = new Date(); d.setDate( d.getDate() + 1 );
?
getDate()
döndürür . Ardından, arama geçerli yıldaki günü ayarlar . Bu yüzden iyi bir genel çözüm DEĞİLDİR . @ AnthonyWJones'un yanıtı aslında doğru çalışıyor. setDate
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
, 2 yıl geçen 3 Ocak 2017 verir.
Benim basit çözümüm:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
bu çözüm yaz saati uygulamasında bir sorun oluşturmaz. Ayrıca, herhangi bir ofseti yıl, ay, gün vb.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
doğru koddur.
setDate
.
Bu cevaplar benim için kafa karıştırıcı görünüyor, tercih ederim:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () bize 1970'den beri milisaniye verir ve 86400000 bir gün içindeki milisaniye sayısıdır. Bu nedenle ms, istenen tarih için milisaniye içerir.
Milisaniye yapıcısının kullanılması istenen tarih nesnesini verir.
new Date(new Date('11/4/2012').getTime() + 86400000)
Deneyin
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Sorunu çözmeyecek bir tarih eklemek için setDate () yöntemini kullanarak, Şubat ayına birkaç gün eklemeyi deneyin, buna yeni günler eklemeye çalışırsanız, beklediğinizle sonuçlanmaz.
setDate()
mı? Bu mu: stackoverflow.com/questions/5497637/…
Sadece aşağıdaki örnekleri takip ederken yıl ekleme ile anlaşma ne olduğunu çözmek için çalışarak yaş geçirdim.
Sahip olduğunuz tarihe sadece n gün eklemek istiyorsanız, gitmek için en iyiniz:
myDate.setDate (myDate.getDate () + n);
veya uzun soluklu versiyon
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Bu bugün / yarın şeyler kafa karıştırıcı. Geçerli tarihi yeni tarih değişkeninize ayarlayarak yıl değerini bozarsınız. eğer orijinal tarihten itibaren çalışacaksanız yapmayacaksınız.
Yapabiliyorsanız moment.js kullanın . JavaScript çok iyi yerel tarih / saat yöntemlerine sahip değil. Aşağıda, Moment'in sözdizimi örneği verilmiştir:
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>
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);
Bu uzantıları dün gece yarattım:
pozitif veya negatif değerleri iletebilirsiniz;
misal:
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;
}
İkinci değişkeni kullanmadan 7'yi sonraki x gününüzle değiştirebilirsiniz:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
substract için 30 gün aralıkla (24 saat = 86400000ms)
new Date(+yourDate - 30 *86400000)
En basit çözüm.
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);
Beklendiği gibi çalışan cevabınız için teşekkürler Jason, kodunuzdan ve AnthonyWJones'in kullanışlı formatından bir karışım:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Geç partiye, kullandığınız ama eğer Moment denilen mükemmel bir eklenti var:jQuery
o zaman
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
Ve diğer birçok iyi şey var!
Edit: jQuery referans aikeru yorum sayesinde kaldırıldı
Boru hattı operatörü için tasarlanmış bir çözüm :
const addDays = days => date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
Kullanımı:
// Without the pipeline operator...
addDays(7)(new Date());
// And with the pipeline operator...
new Date() |> addDays(7);
Daha fazla işlevselliğe ihtiyacınız varsa, date-fns kütüphanesine bakmanızı öneririm .
Eski biliyorum, ama bazen bunu beğendim:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
Önerilen çözümle yaz saati uygulaması sorunları yaşadım.
getUTCDate
/ Yerine kullanarak setUTCDate
sorunumu çözdüm.
// 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;
}
JavaScript kullanabilirsiniz, jQuery gerekmez:
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;
Değişken içermeyen genel prototip, mevcut bir Tarih değerine uygulanır:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
SetDate () için mozilla dokümanları, ay sonu senaryolarını işleyeceğini göstermez. Bkz. Https://developer.mozilla.org/tr-TR/docs/JavaScript/Reference/Global_Objects/Date
tarih ayarla()
Bu yüzden gün eklemem gerektiğinde setTime () kullanıyorum.
Bu kadar basit:
new Date((new Date()).getTime() + (60*60*24*1000));
Sanırım ben de bir cevap vereceğim:
Şahsen, performans açısından pahalı oldukları için değişken değişken bildirimi, yöntem çağrıları ve yapıcı çağrılarından kaçınmaya çalışıyorum. (tabii ki, tabii ki)
@AnthonyWJones tarafından verilen Yanıt altında sadece yorum olarak bu terk edecektim ama daha iyi düşündüm.
// 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;
};
Yukarıdakiler DST'ye saygı gösterecektir. DST'yi geçen birkaç gün eklerseniz, görüntülenen süre (saat) bunu yansıtacak şekilde değişir.
Örnek:
2 Kas 2014 02:00, DST'nin sonu oldu.
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
DST boyunca zamanı korumak istiyorsanız (bu yüzden 10:30 hala 10:30 olacaktır) ...
// 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;
};
Yani, şimdi ...
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
Hayır, javascript'in yerleşik bir işlevi yoktur, ancak basit bir kod satırı kullanabilirsiniz
timeObject.setDate(timeObject.getDate() + countOfDays);
Şöyle bir şey kullanıyorum:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Yaz saati uygulamasıyla çalışır:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Yeni yıl ile çalışır:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Parametrelendirilebilir:
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);
}
Aşağıdaki çözümü kullanıyorum.
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'de int kabul eden bir kurucu vardır. Bu bağımsız değişken 1 Ocak 1970'ten önceki / sonraki toplam milisaniyeyi temsil eder. Aynı zamanda yeni bir Date nesnesi oluşturmadan da aynısını yapan setTime yöntemine sahiptir.
Burada yaptığımız günleri milisaniyeye dönüştürmek ve bu değeri getTime tarafından sağlanan değere eklemek. Son olarak, sonucu Date (milisaniye) yapıcısına veya setTime (milisaniye) yöntemine veririz.
now.setDate(now.getDate() + days);
DST değişikliklerini otomatik olarak işler. Ve düzeltmek zorundayım, artık zamanlar JS zaman damgalarında yok sayılıyor.
Düzenleme:setTime()
(veya setHours()
)
yerine şu şekilde yapabilirsiniz:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Eski:
Kullanmak yerine setTime()
şunları kullanabilirsiniz setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
JSFiddle'a bakın ...
d.setDate(d.getDate() + 1);
Java betiğinde tarih eklemek için çok basit bir kod.
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);
Bunun gibi bir şey yapmanıza izin veren bir setDate ve getDate yöntemi vardır:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Hem birkaç günü çıkarmak hem de tarihinizi insan tarafından okunabilir bir biçimde biçimlendirmek istiyorsanız DateHelper
, şuna benzer bir özel nesne oluşturmayı düşünmelisiniz :
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));
(ayrıca bu Fiddle'a bakın )
Javascript'te prototipin genişletilmesi , özellikle profesyonel kod tabanlarında iyi bir fikir olmayabilir .
Yapmak istediğiniz şey yerel Date
sınıfı genişletmektir :
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)
Bu şekilde, bir günlük Javascript yerel bir addDays
yöntem uygularsa , hiçbir şey kırmazsınız.
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};