JavaScript Tarihine gün ekle


1094

DateJavaScript kullanarak geçerli güne nasıl eklenir . JavaScript'in .Net gibi yerleşik bir işlevi var AddDaymı?

Yanıtlar:


1210

Ş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 .

setDateDoğrudan kullanımdaki sorun , bunun bir mutatör olması ve bu tür şeylerden en iyi şekilde kaçınılmasıdır. ECMA, Datedeğişmez bir yapıdan ziyade değişebilir bir sınıf olarak muamele etmek için uygun gördü .


17
Basitleştirilmiş:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
Duncan

27
@Duncan Bunun yukarıdakilerle aynı olduğundan emin misiniz? Bu sadece 24 saat ekler, ancak bir gün her zaman 24 saat değildir . Sanırım soru, saat bölümünü değiştirmeden tarih bölümünü nasıl 1 gün artıracağımızdır.
Tamás Bolvári

88
864E5nedense 24*60*60kodumu yazmayı tercih ederim :)
Mars Robertson

62
Çocuklar, 864E5 ekleme yöntemini kullanmayın, çünkü bu günlerin 23 veya 25 saat olabileceği gün ışığından yararlanma farkını almaz.
sbrbot

12
Gün ışığından yararlanma konusunda endişelenenler için - Yapma. Bu algoritmalar, tarihin nasıl yorumlandığını değil, temel tarihi değiştirir. DST, tarihin alıcılarında ve ayarlayıcılarında uygulanır - alıcılar yaz aylarında bir saat çıkaracak ve ayarlayıcı saati normalleştirmek için yaz aylarında bu saati geri ekleyecektir. Ancak yalnızca mutlak bir saat kullandığınızda göreli saatlerin yorumlanması gerekmez. Tarih matematiğinin çalışmasının nedeni budur. IMHO ...
Gerard ONeill

755

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

Bu JsFiddle'ı kontrol et


@bzlm, Evet aslında aynı. Tarih prototipini değiştirmez. Ayrıca ana cevaptaki kusurları belirtmek istedim.
sparebytes

Kabul edilen cevap, iki hafta önce kusurlarını belirtmek için düzenlendi. Daha fazla düzenleme yapılması gerektiğini düşünüyor musunuz? Öyleyse nasıl?
bzlm

7
@bzlm: Evet, not " 'dan' tarihi aynı yıl içinde değilse bu yaklaşım başarısız okumak gerektiğine inanıyoruz veya ayın olarak geçerli tarihe ". Hala kullanıcıların cevabı görüp endişe duymadığından uyarıyı okumayacağından endişe ediyorum. Teşekkürler.
sparebytes

3
Bence bu çalışma doğru olmasa bile. Tarih için böyle bir kurucu yoktur: var results = new Date (date); , bkz. http://www.w3schools.com/js/js_dates.asp . Bu genellikle işe yarar olsa bile, bazen dizeye dönüştürme veya tersi nedeniyle yanlış sonuçlara yol açabilir. Olması gereken var result = new Date (date.getTime ());
Marcin

2
@AnkitBalyan, Diğer cevaplara bakın. Gün Işığından Yararlanma Saati nedeniyle düzgün çalışmayabilir
sparebytes

188
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.


1
Evet? Ama bu nedir? (31 Mart 2010'da yayınlandı): bugün = yeni Tarih (); yarın = yeni Tarih (); tomorrow.setDate (today.getDate () + 1); uyarısı (tomorrow.getMonth ()); "3" diyor. alert (yarın); doğru ... Neden ???
d -_- b

12
@sims ayı 0 dizine eklenir. Ay 3 Nisan
Joel Coehoorn

6
Neden 2 ayrı tarih nesnesi yaratmanız gerekiyor? Neden aynı tarih nesnesini kullanmıyorsunuz var d = new Date(); d.setDate( d.getDate() + 1 );?
Joseph Silber

8
Bu yaklaşım yıllar boyunca işe yaramıyor. Başlangıç ​​tarihiniz birkaç yıl öncesindeyse, o yılın gününü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
Drew Noakes

3
@ DrewNoakes — yıllar boyunca çalışmadığı iddianız yanlış. getDate , "o yılın günü" yerine aydaki günü döndürür. Örn var d = new Date(2015,11,30);d.setDate(d.getDate() + 370), 2 yıl geçen 3 Ocak 2017 verir.
RobG

124

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.


13
Not: Bu, zamanı 00:00:00 olarak sıfırlar (bir sorun olabilir veya olmayabilir)
Álvaro González

Dediğiniz gibi, herhangi bir ayın son gününde çalışmıyor. Bunu yılın 12 günü kullanılamaz hale getirir. Hata ayıklamak için bir kabus gibi geliyor !!!
Drew Noakes

6
Hayır Drew, yılda tüm günler için kullanılabilir. Tarih ofsetini 31'den büyük veya ay ofsetini 12'den büyük koyabilirsiniz ve bu işlev gelecek aydaki gün veya gelecek yıl ay olarak yeniden hesaplar. Örneğin: ertesi gün = yeni Tarih (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); mükemmel bir koddur.
sbrbot

getMonth () + 22 var - ne işe yarayacağını düşünüyorsun !?
sbrbot

1
Kabul ediyorum, bu şekilde kullan. Biz sadece çünkü biz yaz saati nedeniyle bir hata vardı setDate.
Jelle

95

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.


46
Bu çözüm gün ışığından tasarruf etmeyi hesaba katmaz. Örneğin, 23 saat sonra aynı tarih döndürülecektir: new Date(new Date('11/4/2012').getTime() + 86400000)
Noah Harrison

6
@NoahMiller Ortaya koyduğunuz sorun bir hata değil bir özellik olabilir! Günde 24 saat eklemek bazen DST'ye dayalı olarak ortaya çıkan zamanı bilmek amacıyla yapılacak doğru şeydir. Örneğinizin geri döndüğü tarih, 4 Kasım'da saat 23: 00'da, belirli bir günde 24 saat sonraki değerdir. Orijinal poster, günün doğru zamanları için bazı arzuları gösteren görünüş tarihini sordu. 24 saat sonra hedefinizin zamanı geldiğinde bu cevap doğrudur.
Andy Novocin

3
Kabul ediyorum Noah, var d2 = new Date (d1.valueOf () + 24 * 60 * 60 * 1000) söylediklerini yapıyor, bir tarihe tam gün değerinde keneler ekliyor.
Corey Alix

6
Bu, bazı durumlarda (örneğin 1 günlük çerezler için) ve diğerlerinin çoğundan daha basit bir çözüm için kesinlikle doğrudur. Neden bu kadar çok downvotes ve çok az upvotes var anlamıyorum: /
Matmarbon

48

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.


26
Hayır, bu doğru cevap olarak işaretlenmemelidir, çünkü bu çözüm her günün 24 * 60 * 60 * 1000 saniye olduğunu varsayar (ancak gün ışığından yararlanma)!
sbrbot

'Şub' sorunu hakkında herhangi bir kanıt var setDate()mı? Bu mu: stackoverflow.com/questions/5497637/…
nobar

9
+1 Bu doğru cevap olarak işaretlenmelidir. Ben "gün ışığından yararlanma" sadece milisaniye sayısı, değer değil , sunum ile ilgili olduğuna inanıyorum . Kaynaktan değeri bakış -Point - açısından ise, günün mili saniye arasında SABİT sayısıdır sunumu bu değişebilir.
disfated

1
@ disfated — bu doğru cevap değil. Yaz saati uygulamasının bittiği gün 25 saattir, ancak bu yöntem yalnızca 24 ekler, böylece tarih aynı olur. Bunun yerine UTC yöntemleri kullanılıyorsa, bir günü temsil etmek için 24 saat kullanılması işe yarar, ancak setDate'i kullanırken neden rahatsız edersiniz ? ;-)
RobG 6:16

38

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.


7
Bu mücevheri burada bulana kadar etraftaki tüm cevapları okuyorum. Şimdi bu mantıklı. Bugün / yarın, hemen hemen tüm cevaplarda, hiç mantıklı olmadığında ve yazarın en çok oylanan cevapta söylediği gibi "okunabilirlik ve netlik için" olmadığı zaman, kafa karıştırıcı ve kötü bir uygulama ve yanlış
Cesc

23

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>

Referans: http://momentjs.com/docs/#/manipulating/add/


1
@ kpull1 asker yerleşik bir çözüm olup olmadığını sorarak çözüm alanını kısıtlamamıştır.
user2910265

4
Modern not: Moment.js, böyle küçük bir amaç için eklemek için inanılmaz derecede ağır. Birkaç yüz KB ve kutunun dışında webpack dostu değil.
Joshua Comeau

1
Tercih ettiğimiz kitaplık date-fns. Webpack dostu, hızlı ve tarihleri ​​değişmez davranır.
Freewalker

1
@ LukeWilliams bugüne kadar hiç date-fns duymamıştı. kontrol edecek. Teşekkürler.
user2910265

2
@JoshuaComeau Eğer cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js adresinden indirirseniz , diskte 53.248 bayt alır. Tüm topun balmumu olduğunu hayal ediyorum, ama bilmiyorum. Her neyse, her neyse. Çok önemli değil.
birdus

22
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);


2
Ara tarih değişkeni gerektirmediği için oy verin.
Jeff Lowery

bu en iyi cevaptır çünkü mutasyonu yoktur
knocte

Her gün 24 saat değil, DST ve artık saniye için başarısız.
Stephan

19

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;
}

7
.AddDays () yöntemi, gün ışığından yararlanma saati sınırlarını aşan tarihler için çalışmaz.
mskfisher

1
Bu, burada daha iyi cevaplardan biridir, çünkü epoc'dan beri tarihleri ​​/ saatleri temsil etmek için milis sayısını kullanırsınız ve ayarlamalar için milis miktarları eklersiniz ... O zaman bunu neden "addMonths" için tutmadınız! ? Ve neden yıl ekleme yok? Sıkıldın mı?
Robin

Aylar dışında zaman periyotları statik sayılarla gösterilebilir. Ancak aylar dört farklı uzunlukta olabilir. Ayrıca, Gün ve daha sonraki herhangi bir zaman dilimi uzunluğu DST'de değişken uzunluğa sahip olabilir, bu nedenle başka bir karmaşıklık düzeyi olmadan artık zamana dayalı eklentiyi kullanamazsınız. AddYears () öğesini ekledim ve addMonths () öğesini düzelttim.
Suamere

14

İ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));

14

substract için 30 gün aralıkla (24 saat = 86400000ms)

new Date(+yourDate - 30 *86400000)


Tarih saatini hesaplamaya çalışırken, bilgisayar bilimindeki milisaniye cinsinden tarih saatini her zaman hatırlayın, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) yeni Tarih (+ Tarihiniz + 30 * (24 * 60 * 60 * 1000))
Eşref Abusada

13

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);


Bence bu en iyi çözüm. Date sınıfını genişletiyorsak, Date örneğinin kendisinin güncellenmesi daha anlamlı olur.
Porlune

10

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;
}

6
Günde 86400000 saniyeden fazla veya daha az olduğunda gün ışığından tasarruf etmeyi hesaba katmaz ve kodunuzda mantıksal hataya (program hatası) neden olabilir.
sbrbot

Bazen buna ihtiyaç vardır. EBay API'sı, 24 saatlik tabanlı x günlük açık artırmalara sahiptir, bu nedenle öğeniz, açık artırma ortasında DST durumu değişirse öğeniz arttığından farklı bir zamanda sona erer. Bu durumda, mantıksal hataları önlemek için bu tür işlevleri kullanmanız gerekir.
Andy Novocin

10

Geç partiye, kullandığınız ama eğer jQueryo zaman Moment denilen mükemmel bir eklenti var:

http://momentjs.com/

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ı


1
an jQuery gerekmez :)
aikeru

Bu durumda daha da iyi !!
RemarkLima

1
Evet, Plain ol 'JS ile çok uzun süre uğraştıktan sonra Moment'i kullandım ve işe yarıyor (tm)!
caseyamcl 9:14

Birkaç JS satırı yapıldığında neden eklentiyi kullanmak istesin ki?
frenchie

@frenchie, birkaç JS satırı olarak başlayan ve uygulamanızın gün, tarih ve saatle ilgili bilgileri işlediği için, yakında birkaç 1000 JS satırı olacak, ardından uygulamayı yerelleştirmeniz istenecek 12 dil ve zaman dilimi ve siz an gibi bir şeyle başlamış
olsaydınız

10

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 .


8

Eski biliyorum, ama bazen bunu beğendim:

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}

2
Bu benim için en anlamlı. Basit, zarif ve aylar / yıllar boyunca hareket eden sorunlara dua etmiyor.
uadrive

1
En basit cevap sundu. Buna dayanarak, 'addDays' prototipi aşağıdaki gibi olacaktır:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974

Her gün 24 saat değil, DST ve artık saniye için başarısız.
Stephan

8

Önerilen çözümle yaz saati uygulaması sorunları yaşadım.

getUTCDate/ Yerine kullanarak setUTCDatesorunumu çö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;
}

8

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;

8

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);
}

7

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()

  • Yerel saate göre belirtilen bir gün için ayın gününü (1-31) ayarlar.

Bu yüzden gün eklemem gerektiğinde setTime () kullanıyorum.


ECMAScript belgelerine bağlanırım, ancak PDF olarak yayınlanırlar; (
Blake Mills

1
Re " setDate () için mozilla dokümanlar ay sonu senaryolarını işleyeceğini göstermiyor ". "Dokümanlar" güncellendi. ;-)
RobG 6:16

7

Bu kadar basit:

new Date((new Date()).getTime() + (60*60*24*1000));

2
Bu UTC günleri eklese de, yerel yöntemler kullanır ve 24 saat olmayan yerel günlere izin vermez, bu da saat dilimi farkı değiştiğinde gerçekleşir (örneğin gün ışığından yararlanma içinde ve dışında).
RobG

6

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

6

Hayır, javascript'in yerleşik bir işlevi yoktur, ancak basit bir kod satırı kullanabilirsiniz

timeObject.setDate(timeObject.getDate() + countOfDays);

5

Şö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);
}

4

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.


Her gün 24 saat değil, DST ve artık saniye için başarısız.
Stephan

Stephan, bunun için başka bir kütüphane var mı?
Vakhtang

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.
Stephan

4

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 ...


Bu mantığı takip ederek bir gün de ekleyebilirsiniz;)d.setDate(d.getDate() + 1);
Rivenfall

4

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);


4

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 )


4

Javascript'te prototipin genişletilmesi , özellikle profesyonel kod tabanlarında iyi bir fikir olmayabilir .

Yapmak istediğiniz şey yerel Datesı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 addDaysyöntem uygularsa , hiçbir şey kırmazsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.