Öka ett datum i JavaScript


Jag behöver öka ett datumvärde med en dag i JavaScript.

Till exempel har jag ett datumvärde 2010-09-11 och jag behöver lagra datumet för nästa dag i en JavaScript-variabel.

Hur kan jag öka ett datum med en dag?

Svar #1

Tre alternativ för dig:

1. Använda endast JavaScripts Date-objekt (inga bibliotek):

Mitt tidigare svar för #1 var fel (det lade till 24 timmar och tog inte hänsyn till övergångar till och från sommartid; Clever Human påpekade att det skulle misslyckas med den 7 november 2010 i Eastern-tidszonen). Istället är Jigars svar det korrekta sättet att göra detta utan ett bibliotek:

// To do it in local time
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);

// To do it in UTC
var tomorrow = new Date();
tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);

Detta fungerar även för den sista dagen i en månad (eller år), eftersom JavaScript-datumobjektet är smart när det gäller övergångar:

// (local time)
var lastDayOf2015 = new Date(2015, 11, 31);
console.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
console.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
console.log("Resulting date: " + nextDay.toISOString());

2. Använda MomentJS:

var today = moment();
var tomorrow = moment(today).add(1, 'days');

(Observera att add ändrar instansen du anropar den på, istället för att returnera en ny instans, så today.add(1, 'days') skulle ändra today. Det är därför vi börjar med en kloning på var tomorrow=....)

3. Använder DateJS, men det har inte uppdaterats på länge:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();

Svar #2

var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

Svar #3

Det enklaste sättet är att konvertera till millisekunder och lägga till 1000*60*60*24 millisekunder t.ex.:

var tomorrow = new Date(today.getTime()+1000*60*60*24);

Svar #4

Imorgon på en rad i ren JS men det är fult !

new Date(new Date().setDate(new Date().getDate() + 1))

Här är resultatet:

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)

Svar #5

Inget av exemplen i detta svar verkar fungera på dagar med sommartidsomställning. På dessa dagar är antalet timmar på en dag inte 24 (de är 23 eller 25, beroende på om man "hoppar fram" eller "backar tillbaka").

Följande AddDays JavaScript-funktion tar hänsyn till sommartid:

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

Här är de tester jag använde för att testa funktionen:

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

Svar #6

Du måste först analysera din sträng innan du följer de andra personernas förslag:

var dateString = "2010-09-11";
var myDate = new Date(dateString);

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

Om du vill ha det tillbaka i samma format igen måste du göra det "manuellt":

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

Men jag föreslår att du skaffar Date.js som nämnts i andra svar, det kommer att hjälpa dig mycket.

Svar #7

Jag känner att inget är säkrare än .getTime() och .setTime(), så detta borde vara det bästa, och även presterande.

const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS

.setDate() för ogiltigt datum (som 31 + 1) är för riskabelt, och det beror på webbläsarens implementation.

Relaterade artiklar