Aggiungi giorni alla data JavaScript


1097

Come aggiungere giorni all'attuale Dateutilizzando JavaScript. JavaScript ha una funzione integrata come .Net AddDay?

Risposte:


1212

Puoi crearne uno con: -

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

Questo si occupa di aumentare automaticamente il mese, se necessario. Per esempio:

31/08 + 1 giorno diventerà 9/1 .

Il problema con l'utilizzo setDatediretto è che si tratta di un mutatore e questo genere di cose è meglio evitare. L'ECMA ha ritenuto opportuno trattare Datecome una classe mutabile piuttosto che una struttura immutabile.


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

27
@Duncan Sei sicuro che sia uguale al precedente? Questo aggiunge semplicemente 24 ore, ma un giorno non è sempre 24 ore . Immagino che la domanda sia come aumentare la parte della data di 1 giorno, senza cambiare la parte dell'ora.
Tamás Bolvári,

88
864E5per qualche ragione preferisco scrivere 24*60*60nel mio codice :)
Mars Robertson,

62
Ragazzi, non usate il metodo per aggiungere 864E5 perché questo non fa differenza con l'ora legale dove i giorni possono essere 23 o 25 ore.
sbrbot,

12
Per quelli di voi preoccupati per l'ora legale - No. Questi algoritmi cambiano la data sottostante, non il modo in cui la data viene interpretata. L'ora legale viene implementata nei getter e nei setter della data: i getter devono sottrarre un'ora in estate e il setter aggiunge quell'ora indietro durante l'estate per normalizzare l'ora. Ma solo quando si utilizza un'ora assoluta, non è necessario interpretare le ore relative. Ecco perché la matematica della data funziona. IMHO ...
Gerard ONeill,

755

Risposta corretta :

function addDays(date, days) {
  var result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

Risposta errata :

Questa risposta a volte fornisce il risultato corretto ma molto spesso restituisce l'anno e il mese sbagliati. L'unica volta che funziona questa risposta è quando la data in cui stai aggiungendo giorni sembra avere l'anno e il mese correnti.

// Don't do it this way!
function addDaysWRONG(date, days) {
  var result = new Date();
  result.setDate(date.getDate() + days);
  return result;
}

Prova / Esempio

Dai un'occhiata a questo JsFiddle


@bzlm, Sì, essenzialmente lo stesso. Semplicemente non modifica il prototipo della data. Volevo anche sottolineare i difetti nella risposta principale.
sparebytes

La risposta accettata è stata modificata quindici giorni fa per evidenziarne i difetti. Pensi che abbia bisogno di ulteriori modifiche? Se é cosi, come?
bzlm,

7
@bzlm: Sì, credo che la nota dovrebbe leggere "questo approccio fallisce se la data" da "non è nello stesso anno o mese della data corrente ". Mi preoccupo ancora che gli utenti guardino la risposta e non leggano l'avviso poiché non si distingue. Grazie.
sparebytes

3
Penso che, anche se questo lavoro non è corretto. Non esiste tale costruttore per Date: var result = new Date (date); , consultare http://www.w3schools.com/js/js_dates.asp . Anche se di solito funziona, a volte può portare a risultati errati a causa della conversione in stringa e viceversa. Dovrebbe essere var result = new Date (date.getTime ());
Marcin,

2
@AnkitBalyan, Vedi altre risposte. Potrebbe non funzionare correttamente a causa dell'ora legale
sparebytes

188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

Fai attenzione, perché questo può essere difficile. Quando si imposta "domani", funziona solo perché il valore corrente corrisponde all'anno e al mese per "oggi". Tuttavia, l'impostazione su un numero di data come "32" normalmente funzionerà ancora bene per spostarlo al mese successivo.


1
Si? Ma cos'è questo? (eseguito il 31 marzo 2010): oggi = nuova data (); domani = nuova data (); tomorrow.setDate (today.getDate () + 1); alert (tomorrow.getMonth ()); Dice "3". alert (domani); è corretto ... Perché ???
d -_- b

12
Il mese @sims è 0 indicizzato. Il mese 3 è aprile
Joel Coehoorn,

7
Perché è necessario creare 2 oggetti data separati? Perché non è sufficiente utilizzare lo stesso oggetto data: var d = new Date(); d.setDate( d.getDate() + 1 );?
Joseph Silber,

8
Questo approccio non funziona negli anni. Se la tua data di inizio è di qualche anno fa, getDate()restituisce il giorno di quell'anno . Quindi, la chiamata setDateimposta il giorno dell'anno corrente . Quindi NON è una buona soluzione generale. La risposta di AnthonyWJones in realtà funziona correttamente.
Drew Noakes,

3
@ DrewNoakes: la tua affermazione che non funziona per anni è sbagliata. getDate restituisce il giorno del mese, non "il giorno di quell'anno". Ad esempio, il var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)3 gennaio 2017 attraversa 2 anni.
RobG,

124

La mia soluzione semplice è:

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

questa soluzione non ha problemi con l'ora legale. Inoltre, è possibile aggiungere / sostituire qualsiasi offset per anni, mesi, giorni ecc.

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

è il codice corretto.


13
Nota: questo ripristina il tempo alle 00:00:00 (può essere un problema o meno)
Álvaro González,

Non funziona l'ultimo giorno di ogni mese, come dici tu. Rende questo inutilizzabile nei 12 giorni dell'anno. Sembra un incubo per il debug !!!
Drew Noakes,

6
No Drew, è utilizzabile per tutti i giorni dell'anno. Puoi impostare uno scostamento della data maggiore di 31 o uno scostamento del mese maggiore di 12 e questa funzione lo ricalcolerà come giorno del mese successivo o mese dell'anno successivo. Ad esempio: nextday = new Date (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); è perfettamente codice.
sbrbot,

c'è getMonth () + 22 - cosa pensi che funzioni !?
sbrbot,

1
Sono d'accordo, utilizzare in questo modo. Abbiamo appena avuto un bug a causa dell'ora legale perché stavamo usando setDate.
Jelle,

95

Queste risposte mi sembrano confuse, preferisco:

var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);

getTime () ci dà millisecondi dal 1970 e 86400000 è il numero di millisecondi in un giorno. Quindi, ms contiene millisecondi per la data desiderata.

L'uso del costruttore in millisecondi fornisce l'oggetto data desiderato.


46
Questa soluzione non tiene conto dell'ora legale. Quindi, per esempio, questo restituirà la stessa data, 23 ore dopo: new Date(new Date('11/4/2012').getTime() + 86400000)
Noah Harrison,

6
@NoahMiller Il problema che sollevi potrebbe essere una caratteristica, non un bug! L'aggiunta di 24 ore al giorno è talvolta la cosa giusta da fare, con l'obiettivo di conoscere il tempo risultante in base all'ora legale. La data di ritorno del tuo esempio ha un valore di ora di 23:00 il 4 novembre, ovvero 24 ore dopo in quel particolare giorno. Il poster originale chiedeva del datetime che sembrerebbe indicare un certo desiderio di orari corretti della giornata. Questa risposta è corretta se ti trovi nel caso in cui il tuo obiettivo sia il momento dopo 24 ore.
Andy Novocin,

3
Sono d'accordo Noah, var d2 = new Date (d1.valueOf () + 24 * 60 * 60 * 1000) fa quello che dice, aggiunge un giorno intero di tick per una data.
Corey Alix,

6
Questo è assolutamente corretto per alcuni casi (ad esempio per i cookie di 1 giorno) e una soluzione più semplice rispetto alla maggior parte degli altri. Non capisco perché abbia così tanti voti negativi e così pochi voti positivi: /
Matmarbon,

48

Provare

var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));

Usando setDate () per aggiungere una data non risolverai il tuo problema, prova ad aggiungere alcuni giorni a un mese di febbraio, se provi ad aggiungere nuovi giorni ad esso, non si tradurrà in quello che ti aspettavi.


26
No, questa non dovrebbe essere contrassegnata come la risposta corretta poiché questa soluzione presuppone che ogni giorno abbia 24 * 60 * 60 * 1000 secondi ma non lo fa (ora legale)!
sbrbot,

Qualche prova del problema "Feb" con setDate()? E 'questo: stackoverflow.com/questions/5497637/...
Nobar

9
+1 Questo DOVREBBE essere contrassegnato come la risposta corretta. Credo che "l'ora legale" riguardi la presentazione e non il valore , che è solo il numero di millisecondi. Dal punto di vista del valore - il giorno è il numero CONST di millisecondi, mentre in termini di presentazione può variare.
sfigurato il

1
@ disfated: questa non è la risposta corretta. Il giorno che esce dall'ora legale ha 25 ore, ma questo metodo ne aggiunge solo 24, quindi la data sarà la stessa. L'uso di 24 ore per rappresentare un giorno funziona se si utilizzano invece metodi UTC, ma perché preoccuparsi quando si utilizza setDate è più conveniente? ;-)
RobG

38

Ho appena trascorso anni a cercare di capire quale fosse l'accordo con l'anno che non si aggiungeva seguendo gli esempi di piombo di seguito.

Se vuoi semplicemente aggiungere n giorni alla data che hai, è meglio andare semplicemente:

myDate.setDate (myDate.getDate () + n);

o la versione longwinded

var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);

Questa roba di oggi / domani è confusa. Impostando la data corrente nella nuova variabile di data, confonderai il valore dell'anno. se lavori dalla data originale non lo farai.


7
Leggendo tutte le risposte fino a quando non trovo questo gioiello qui. Adesso ha senso. Incredibile che la cosa di oggi / domani sia stata copiata in quasi tutte le risposte, quando non ha alcun senso e non è "per leggibilità e chiarezza" come dice l'autore nella risposta più votata, nel commento più votato, è confuso e una cattiva pratica e sbagliato
Cesc

23

Se puoi, usa moment.js . JavaScript non ha ottimi metodi nativi di data / ora. Di seguito è riportato un esempio della sintassi di 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>

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


1
@ kpull1 il richiedente non ha limitato il dominio della soluzione chiedendo se esiste una soluzione integrata.
user2910265

4
Nota moderna: Moment.js è incredibilmente pesante da aggiungere per uno scopo così piccolo. Ha diverse centinaia di KB e non è subito compatibile con il webpack.
Joshua Comeau,

1
La nostra libreria preferita è data-fns. Webpack-friendly, veloce e tratta le date come immutabili.
Freewalker,

1
@LukeWilliams non ha mai sentito parlare di data-fns fino ad ora. lo verificherò. Grazie.
user2910265

2
@JoshuaComeau Se lo scarichi da cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js , occupano 53.248 byte sul disco. Immagino che sia l'intera palla di cera, ma non lo so. Comunque, qualunque cosa. Non è un grosso problema.
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
Upgrade per non aver richiesto una variabile di data intermedia.
Jeff Lowery,

questa è la risposta migliore perché non ha una mutazione
knocte

Non tutti i giorni hanno 24 ore, falliscono per l'ora legale e saltano secondi.
Stephan,

19

Ho creato queste estensioni ieri sera:
puoi passare valori positivi o negativi;

esempio:

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
Il metodo .addDays () non funziona per le date che attraversano i limiti dell'ora legale.
mskfisher,

1
Questa è una delle risposte migliori qui perché tu usi (correttamente) il numero di millis dall'epoc per rappresentare date / orari e aggiungi quantità di millis per aggiustamenti ... Perché allora non lo hai tenuto per "addMonths"! ? E perché non aggiungere un anno? Ti sei annoiato?
Robin,

Oltre ai mesi, i periodi di tempo possono essere rappresentati da numeri statici. Ma i mesi possono essere di quattro lunghezze diverse. Inoltre, qualsiasi periodo di tempo compreso tra Giorni e superiori può avere una lunghezza variabile all'ora legale, quindi non è più possibile utilizzare l'aggiunta basata sul tempo senza un altro livello di complessità. Ho aggiunto addYears () e risolto addMonths ().
Suamere,

14

Senza utilizzare la seconda variabile, è possibile sostituire 7 con i prossimi x giorni:

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));

14

per sottrarre 30 giorni di utilizzo (24 ore = 86400000 ms)

new Date(+yourDate - 30 *86400000)


Quando si tenta di calcolare l'ora della data, ricordare sempre che l'ora della data è basata su millisecondi in informatica, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) nuova data (+ yourDate + 30 * (24 * 60 * 60 * 1000))
Ashraf Abusada,

13

La soluzione più semplice

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


Penso che questa sia la soluzione migliore. Se stiamo estendendo la classe Date, allora ha più senso che l'istanza Date venga essa stessa aggiornata.
Porlune,

10

Grazie Jason per la tua risposta che funziona come previsto, ecco un mix dal tuo codice e dal pratico formato di AnthonyWJones:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

6
Non tiene conto dell'ora legale quando ci sono più o meno di 86400000 secondi al giorno e può causare errori logici (bug del programma) nel codice.
sbrbot,

A volte è necessario. L'API eBay ha aste x-day che sono basate su 24 ore in modo che il tuo articolo finisca in un momento diverso rispetto a quando aumenta lo stato dell'ora legale cambia a metà dell'asta. In tal caso, è necessario utilizzare questo tipo di funzione per evitare errori logici.
Andy Novocin,

10

In ritardo alla festa, ma se si utilizza jQuerypoi c'è un ottimo plugin chiamato Moment:

http://momentjs.com/

var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();

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

E tante altre cose buone lì dentro!

Modifica: riferimento jQuery rimosso grazie al commento di aikeru


1
momento non ha bisogno di jQuery :)
aikeru,

Ancora meglio in quel caso !!
Osservazione Lima,

1
Sì, dopo aver perso tempo con Plain ol 'JS per troppo tempo, ho usato Moment, e funziona (tm)!
caseyamcl,

Perché vorresti usare il plugin quando alcune linee di JS lo faranno?
frenchie,

@frenchie perché, ciò che inizia come poche righe di JS e poiché chiaramente la tua applicazione sta manipolando giorni, date e informazioni relative all'ora, saranno presto alcune 1000 righe di JS, quindi ti verrà chiesto di localizzare l'app su 12 lingue e fusi orari e avresti voluto iniziare con qualcosa di simile al momento;)
NotaLima

10

Una soluzione progettata per l' operatore della pipeline :

const addDays = days => date => {
  const result = new Date(date);

  result.setDate(result.getDate() + days);

  return result;
};

Uso:

// Without the pipeline operator...
addDays(7)(new Date());

// And with the pipeline operator...
new Date() |> addDays(7);

Se hai bisogno di più funzionalità, ti suggerisco di consultare la libreria date-fns .


8

Vecchio lo so, ma a volte mi piace questo:

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

2
Questo ha più senso per me. È semplice, elegante e non cade in preghiera per problemi che si spostano per mesi / anni.
uadrive

1
Presentata la risposta più semplice. Partendo da questo, il prototipo "addDays" sarebbe il seguente:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974,

Non tutti i giorni hanno 24 ore, falliscono per l'ora legale e saltano secondi.
Stephan,

8

Ho avuto problemi con l'ora legale con la soluzione proposta.

Usando getUTCDate/ setUTCDateinvece, ho risolto il mio problema.

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

Puoi usare JavaScript, non è richiesto 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;

8

Prototipo generico senza variabili, si applica a un valore Data esistente:

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}

7

I documenti mozilla per setDate () non indicano che gestirà gli scenari di fine mese. Vedi https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

impostare la data()

  • Imposta il giorno del mese (1-31) per una data specificata in base all'ora locale.

Ecco perché utilizzo setTime () quando devo aggiungere giorni.


Vorrei collegarmi ai documenti ECMAScript, ma sono rilasciati in PDF; (
Blake Mills,

1
Ri "i documenti mozilla per setDate () non indicano che gestirà gli scenari di fine mese ". I "documenti" sono stati aggiornati, quindi ora lo fanno. ;-)
RobG

7

Semplice come questo:

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

2
Mentre questo aggiunge giorni UTC, utilizza metodi locali e non consente giorni locali che non durano 24 ore, il che si verifica quando cambia l'offset del fuso orario (ad esempio, l'ora legale dentro e fuori l'ora legale).
RobG

6

Immagino che darò anche una risposta:
personalmente, mi piace tentare di evitare dichiarazioni variabili gratuite, chiamate di metodo e chiamate del costruttore, poiché sono tutte costose in termini di prestazioni. (entro limiti ragionevoli, ovviamente)
Stavo per lasciare questo come solo un commento sotto la Risposta data da @AnthonyWJones ma ci ho pensato meglio.

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

Quanto sopra rispetterà l'ora legale. Ciò significa che se si aggiunge un numero di giorni che attraversano l'ora legale, l'ora visualizzata (ora) cambierà per riflettere tale.
Esempio:
2 novembre 2014 02:00 era la fine dell'ora legale.

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

Se stai cercando di mantenere il tempo attraverso l'ora legale (quindi le 10:30 saranno ancora le 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;
};

Quindi, ora hai ...

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

No, JavaScript non ha una funzione integrata, ma puoi usare una semplice riga di codice

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

5

Uso qualcosa del tipo:

new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)

Funziona con l'ora legale:

new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

Funziona con il nuovo anno:

new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

Può essere parametrizzato:

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

Sto usando la seguente soluzione.

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

La data ha un costruttore che accetta un int. Questo argomento rappresenta i millisecondi totali prima / dopo il 1 ° gennaio 1970. Ha anche un metodo setTime che fa lo stesso senza creare un nuovo oggetto Date.

Quello che facciamo qui è convertire i giorni in millisecondi e aggiungere questo valore al valore fornito da getTime. Infine, diamo il risultato al costruttore Date (millisecondi) o al metodo setTime (millisecondi).


Non tutti i giorni hanno 24 ore, falliscono per l'ora legale e saltano secondi.
Stephan,

Stephan, c'è qualche altra libreria a spiegarlo?
Vakhtang,

now.setDate(now.getDate() + days);gestisce automaticamente le modifiche all'ora legale. E devo correggere, i secondi saltati sono ignorati nei timestamp di JS.
Stephan,

4

Modifica: invece di setTime()(o setHours()) potresti farlo in questo modo:

Date.prototype.addDays= function(d){
  this.setDate(this.getDate() + d);
  return this;
};

var tomorrow = new Date().addDays(1);

Vecchio:

Invece di usare setTime()puoi usare setHours():

Date.prototype.addDays= function(d){
    this.setHours(this.getHours() + d * 24);
    return this;
};

var tomorrow = new Date().addDays(1);

Guarda il JSFiddle ...


seguendo questa logica potresti anche aggiungere un giorno;)d.setDate(d.getDate() + 1);
Rivenfall,

4

Codice molto semplice per aggiungere giorni in data nello script java.

var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);


4

C'è un setDate e un metodo getDate , che ti permettono di fare qualcosa del genere:

var newDate = aDate.setDate(aDate.getDate() + numberOfDays);

Se vuoi sottrarre un numero di giorni e formattare la data in un formato leggibile, dovresti prendere in considerazione la creazione di un DateHelperoggetto personalizzato che assomigli a questo:

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

(vedi anche questo violino )


4

L'estensione del prototipo in JavaScript potrebbe non essere una buona idea , soprattutto nelle basi di codice professionali.

Quello che vuoi fare è estendere la Dateclasse nativa :

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)

In questo modo, se un giorno Javascript implementa un addDaysmetodo nativo , non romperai nulla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.