2012-04-03 23 views
39

HoCome posso aggiungere 1 giorno alla data corrente?

var ds = stringFormat("{day} {date} {month} {year}", { 
       day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
       date: date.getUTCDate(), 
       month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
       year: date.getUTCFullYear() 
}); 

Come posso aggiungere uno giorno in esso?

ho aggiunto uno a getUTCDay() e getUTCDate(), ma 'Domenica' non visualizzarlo.

+1

Che cosa si intende per "aggiungere +1"? Hai bisogno del giorno dopo o qualcos'altro? –

+0

sì, aggiungici il giorno successivo. – franticfrantic

+0

Does 'date: (date.getUTCDate() + 1)' non funziona (funziona per me)? .? E 'possibile che ci sia un conflitto di denominazione con 'date' (come Date() - _and_ oggetto come oggetto-Key Hai provato a chiamare il Date() - oggetto diverso –

risposta

114

Per aggiungere un giorno a un oggetto data:

var date = new Date(); 

// add a day 
date.setDate(date.getDate() + 1); 
+0

vedere la domanda duplicato. : http://stackoverflow.com/questions/3674539/javascript-date-increment-question.Questa risposta è buona, ma non tiene conto dell'ora legale. Ci sono 2 giorni dell'anno che non hanno 24 ore. – Jess

+2

@ Jess: dipende da come si desiderano le modifiche rispetto all'ora legale rappresentata. La domanda ha chiesto come aggiungere uno alla data, questo è esattamente ciò che fa la risposta di cui sopra. L'aggiunta di 24 ore non necessariamente incrementa quella data, aggiungendone una alla data locale usando [* setDate *] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.36) sempre. – RobG

+0

Ecco cosa intendo. Incremento il 10 marzo: 'var a = new Date (" 2013-03-10T00: 00: 00.000Z ");' 'a.setDate (a.getDate() + 1);' 'a.toISOString();' is ' "2013-03-10T23: 00: 00.000Z"'. Questo è un caso sottile in cui la funzione di cui sopra non ha funzionato per me. – Jess

21

A mio modesto parere il modo migliore è quello di aggiungere solo un giorno intero in millisecondi, a seconda di come si fattore il codice si può rovinare se il vostro l'ultimo giorno del mese.

per esempio 28 febbraio o il 31 marzo

Ecco un esempio di come lo farei:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567 
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms 
followingDay.toLocaleDateString(); 

imo questo assicura la precisione

qui è un altro esempio che non mi piace che può funzionare per voi, ma non pulite quella dose sopra

var today = new Date('12/31/2015'); 
var tomorrow = new Date(today); 
tomorrow.setDate(today.getDate()+1); 
tomorrow.toLocaleDateString(); 

imho questo === 'POOP'

Così alcuni di voi hanno avuto lamentele circa il mio approccio millisecondo a causa della giornata tempo di risparmio di luce. Quindi, sto per farlo. Innanzitutto, alcuni paesi e stati non dispongono di un orario di risparmio luce giorno. La seconda aggiunta di esattamente 24 ore è un giorno intero. Se la dose del numero della data non cambia una volta all'anno ma viene riparata 6 mesi dopo, non vedo un problema lì. Ma allo scopo di essere definito e di dover trattare con il maledetto Date() ho pensato a questo e ora odio completamente Data. Quindi questo è il mio nuovo approccio

var dd = new Date(); // or any date and time you care about 
var dateArray = dd.toISOString().split('T')[0].split('-').concat(dd.toISOString().split('T')[1].split(':')); 
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

Ora per la parte divertente!

var date = { 
    day: dateArray[2], 
    month: dateArray[1], 
    year: dateArray[0], 
    hour: dateArray[3], 
    minutes: dateArray[4], 
    seconds:dateArray[5].split('.')[0], 
    milliseconds: dateArray[5].split('.')[1].replace('Z','') 
} 

ora abbiamo il nostro Ufficiale valido internazionale Data Oggetto chiaramente scritto al meridiano Zulu. Ora per cambiare la data

dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward 
    tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it. 
+0

L'aggiunta di secondi/millisecondi non funzionerà per l'ora legale. –

+0

@Matt H da dove hai preso l'idea. L'ora è impostata in UTC in millisecondi dal 1970/01/01 –

+1

Sarà il giorno successivo in ora UTC, sì, ma non necessariamente in ora locale. Il giorno di Spring Forward negli Stati Uniti, ci sono 25 ore al giorno. Quindi se ne hai, ad es. 31/03/15 alle 00:00 e aggiungendo 86400000 millisecondi, al giorno di Sprint Forward, l'ora locale sarà 31/3/15 alle 23:00 poiché ci sono 25 ore in quel giorno. –

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

+0

L'aggiunta di un giorno di millisecondi non riesce perché non tutti i giorni sono 24 ore in luoghi che osservano l'ora legale. Per esempio. Il Cile termina l'ora legale a mezzanotte, all'inizio del 14 maggio 2017. Gli orologi riprenderanno da mezzanotte alle 23:00. Quindi aggiungendo 24 ore al 2017-05-13 00:00:00 produrrà il 2017-05-13 23:00:00, e la data non cambierà (alcuni browser lo faranno esattamente alla mezzanotte, altri un millisecondo dopo) . :-( – RobG

Problemi correlati