Devo incrementare un valore di data di un giorno in JavaScript.
Ad esempio, ho un valore di data 2010-09-11 e devo memorizzare la data del giorno successivo in una variabile JavaScript.
Come posso aumentare una data di un giorno?
Devo incrementare un valore di data di un giorno in JavaScript.
Ad esempio, ho un valore di data 2010-09-11 e devo memorizzare la data del giorno successivo in una variabile JavaScript.
Come posso aumentare una data di un giorno?
Risposte:
Tre opzioni per te:
Date
oggetto JavaScript (no librerie):La mia precedente risposta per il n. 1 era errata (ha aggiunto 24 ore, non riuscendo a tenere conto delle transizioni da e verso l'ora legale; Clever Human ha sottolineato che avrebbe fallito con il 7 novembre 2010 nel fuso orario orientale). Invece, la risposta di Jigar è il modo corretto di farlo senza una libreria:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Funziona anche per l'ultimo giorno di un mese (o anno), poiché l'oggetto data JavaScript è intelligente riguardo al rollover:
(Questa risposta è attualmente accettata, quindi non posso eliminarla. Prima che fosse accettata, ho suggerito all'OP che accettano Jigar, ma forse hanno accettato questa per gli articoli 2 o 3 dell'elenco.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Attenzione add
modificare l'istanza su cui la chiami, piuttosto che restituire una nuova istanza, quindi today.add(1, 'days')
cambierebbe today
. Ecco perché iniziamo con un'operazione di clonazione attiva var tomorrow = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
Date
costruttore ( new Date(year, month, date)
); vedere la sezione 15.9.2.1 del disciplinare ; se vuoi accettare una vasta gamma di formati, dai un'occhiata a DateJS .
Date.parse
(che restituisce un numero di millisecondi in cui puoi quindi inserire new Date(ms)
). Ma attenzione, che può variare da browser a browser. Fino a poco tempo fa, le implementazioni potevano fare praticamente qualsiasi cosa volessero Date.parse
. La nuova specifica per la 5a edizione ha ora un formato minimo che deve essere accettato, ma non ci contare ancora.
x = new Date(); x2 = new Date(x.getTime() + 1000)
, dove 1000 è un incremento di millisecondi.
Date
gli oggetti sono mutabili. Stai memorizzando lo stesso Date
oggetto tre volte nell'array. Se vuoi tre Date
oggetti diversi , devi creare tre oggetti:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
new Date("2009-09-11")
ma Firefox no. Penso che la maggior parte dei browser accetti new Date("2009/09/11")
così sarebbe una soluzione semplice var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.
-
con /
e sperando che i browser lo accetteranno, sarebbe quella di dividere la stringa in parti: var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Si noti che stiamo usando m-1
qui, perché mesi javascript sono valori enum (gennaio essendo 0, non 1), e d+1
perché noi stai facendo l'incremento già nell'assegnazione iniziale (si correggerà automaticamente per il 29 febbraio, ecc.)
Nessuno degli esempi in questa risposta sembra funzionare con i giorni di regolazione dell'ora legale. In quei giorni, il numero di ore in un giorno non è 24 (sono 23 o 25, a seconda che tu stia "balzando in avanti" o "cadendo indietro").
Di seguito la funzione javascript AddDays tiene conto dell'ora legale:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Ecco i test che ho usato per testare la funzione:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
Il modo più semplice è convertire in millisecondi e aggiungere 1000 * 60 * 60 * 24 millisecondi, ad esempio:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
ma in realtà è simile a getTime()
/ setTime()
, davvero.
new Date(Date.now()+1000*60*60*24);
Devi prima analizzare la tua stringa prima di seguire il suggerimento delle altre persone:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Se lo desideri di nuovo nello stesso formato, dovrai farlo "manualmente":
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
Ma suggerisco di ottenere Date.js come menzionato in altre risposte, che ti aiuterà molto .
Sento che nulla è più sicuro di .getTime()
e .setTime()
, quindi questo dovrebbe essere il migliore e anche performante.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
per data non valida (come 31 + 1) è troppo pericoloso e dipende dall'implementazione del browser.
Ottenere i prossimi 5 giorni:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
Due metodi:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2: simile al metodo precedente
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
Ottieni il valore stringa della data usando il metodo dateObj.toJSON () Rif: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Taglia la data dal reso valore e quindi incrementare del numero di giorni desiderati.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Esempio
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Risultato
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
Non sono del tutto sicuro se si tratta di un BUG (testato Firefox 32.0.3 e Chrome 38.0.2125.101), ma il seguente codice fallirà sul Brasile (-3 GMT):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Risultato:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Aggiungendo un'ora alla data, funzionerà perfettamente (ma non risolve il problema).
$date = new Date(2014, 9, 16,0,1,1);
Risultato:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
Risultati in una rappresentazione in formato stringa della data di domani. Utilizzare new Date () per ottenere la data odierna, aggiungendo un giorno usando Date.getDate () e Date.setDate () e convertendo l'oggetto Date in una stringa.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
Anno di data incrementale con vaniglia js:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
Nel caso in cui qualcuno desideri incrementare un valore diverso dalla data (giorno)
Tramite JS nativo, per aggiungere un giorno è possibile effettuare le seguenti operazioni:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Un'altra opzione è utilizzare la moment
libreria:
const date = moment().add(14, "days").toDate()
Incremento della data di rilevamento di fuso orario / ora legale per le date JavaScript:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}