Risposte:
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 setDate
diretto è che si tratta di un mutatore e questo genere di cose è meglio evitare. L'ECMA ha ritenuto opportuno trattare Date
come una classe mutabile piuttosto che una struttura immutabile.
864E5
per qualche ragione preferisco scrivere 24*60*60
nel mio codice :)
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
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.
var d = new Date(); d.setDate( d.getDate() + 1 );
?
getDate()
restituisce il giorno di quell'anno . Quindi, la chiamata setDate
imposta il giorno dell'anno corrente . Quindi NON è una buona soluzione generale. La risposta di AnthonyWJones in realtà funziona correttamente.
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
3 gennaio 2017 attraversa 2 anni.
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.
setDate
.
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.
new Date(new Date('11/4/2012').getTime() + 86400000)
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.
setDate()
? E 'questo: stackoverflow.com/questions/5497637/...
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.
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/
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);
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;
}
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));
per sottrarre 30 giorni di utilizzo (24 ore = 86400000 ms)
new Date(+yourDate - 30 *86400000)
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);
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;
}
In ritardo alla festa, ma se si utilizza c'è un ottimo plugin chiamato Moment:jQuery
poi
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
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 .
Vecchio lo so, ma a volte mi piace questo:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
Ho avuto problemi con l'ora legale con la soluzione proposta.
Usando getUTCDate
/ setUTCDate
invece, 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;
}
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;
Prototipo generico senza variabili, si applica a un valore Data esistente:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
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()
Ecco perché utilizzo setTime () quando devo aggiungere giorni.
Semplice come questo:
new Date((new Date()).getTime() + (60*60*24*1000));
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
No, JavaScript non ha una funzione integrata, ma puoi usare una semplice riga di codice
timeObject.setDate(timeObject.getDate() + countOfDays);
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);
}
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).
now.setDate(now.getDate() + days);
gestisce automaticamente le modifiche all'ora legale. E devo correggere, i secondi saltati sono ignorati nei timestamp di JS.
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 ...
d.setDate(d.getDate() + 1);
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);
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 DateHelper
oggetto 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 )
L'estensione del prototipo in JavaScript potrebbe non essere una buona idea , soprattutto nelle basi di codice professionali.
Quello che vuoi fare è estendere la Date
classe 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 addDays
metodo nativo , non romperai nulla.
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};