Dag toevoegen aan JavaScript-datum

Hoe u dagen kunt toevoegen aan de huidige Datemet JavaScript. Heeft JavaScript een ingebouwde functie zoals AddDayvan .Net?


Antwoord 1, autoriteit 100%

Je kunt er een maken met:-

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}
var date = new Date();
console.log(date.addDays(5));

Antwoord 2, autoriteit 60%

Correct antwoord:

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

Onjuist antwoord:

Dit antwoord somsgeeft het juiste resultaat, maar geeft heel vaak het verkeerde jaar en de verkeerde maand. De enige keer dat dit antwoord werkt, is wanneer de datum waaraan u dagen toevoegt, toevallig het huidige jaar en de huidige maand heeft.

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

Bewijs / Voorbeeld

Controleer deze JsFiddle


Antwoord 3, autoriteit 16%

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

Wees voorzichtig, want dit kan lastig zijn. Bij het instellen van tomorrowwerkt het alleen omdat de huidige waarde overeenkomt met het jaar en de maand voor today. Het instellen op een datumnummer zoals “32” werkt normaal nog steeds prima om het naar de volgende maand te verplaatsen.


Antwoord 4, Autoriteit 10%

Mijn eenvoudige oplossing is:

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

Deze oplossing heeft geen probleem met de zomertijd. Ook kan men een offset voor jaren, maanden, dagen enz.

toevoegen / sub toevoegen

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

is de juiste code.


Antwoord 5, Autoriteit 9%

Deze antwoorden lijken verwarrend voor mij, ik geef de voorkeur:

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

Get time () geeft ons milliseconden sinds 1970 en 86400000 is het aantal milliseconden op een dag.
Daarom bevat MS milliseconden voor de gewenste datum.

Het gebruik van de Milliseconde-constructeur geeft het gewenste datumobject.


Antwoord 6, Autoriteit 4%

Probeer

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

Setdate gebruiken () Om een ​​datum toe te voegen, kan je probleem niet oplossen, probeer wat dagen toe te voegen aan een maand van feb. Als je probeert nieuwe dagen aan toe te voegen, zal het niet leiden tot wat je verwachtte.


Antwoord 7, Autoriteit 3%

Ik heb er eeuwen over gedaan om erachter te komen wat de deal was met het jaar dat niet werd toegevoegd bij het volgen van de onderstaande voorbeelden.

Als je gewoon n dagen wilt toevoegen aan de datum die je hebt, kun je het beste gewoon gaan:

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

of de langdradige versie

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

Deze dingen van vandaag/morgen zijn verwarrend. Door de huidige datum in uw nieuwe datumvariabele in te stellen, verknoeit u de jaarwaarde. als je vanaf de oorspronkelijke datum werkt, doe je dat niet.


Antwoord 8, autoriteit 2%

Dit is de manier waarop dagen, maanden en jaren voor een bepaalde datum in Javascript worden toegevoegd.

// To add Days
var d = new Date();
d.setDate(d.getDate() + 5);
// To add Months
var m = new Date();
m.setMonth(m.getMonth() + 5);
// To add Years
var m = new Date();
m.setFullYear(m.getFullYear() + 5);

Antwoord 9, autoriteit 2%

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

Antwoord 10, autoriteit 2%

Gebruik indien mogelijk moment.js. JavaScript heeft geen erg goede native datum/tijd-methoden. Het volgende is een voorbeeld van de syntaxis van 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>

Antwoord 11

Ik heb gisteravond deze extensies gemaakt:
u kunt zowel positieve als negatieve waarden doorgeven;

voorbeeld:

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

Antwoord 12

De eenvoudigste aanpak die ik heb geïmplementeerd, is om Date() zelf te gebruiken.
`

const days = 15; 
// Date.now() gives the epoch date value (in milliseconds) of current date 
nextDate = new Date( Date.now() + days * 24 * 60 * 60 * 1000)

`


Antwoord 13

het eenvoudigste antwoord is, ervan uitgaande dat het nodig is om 1 dag toe te voegen aan de huidige datum:

var currentDate = new Date();
var numberOfDayToAdd = 1;
currentDate.setDate(currentDate.getDate() + numberOfDayToAdd );

Om u regel voor regel uit te leggen wat deze code doet:

  1. Maak de variabele huidige datummet de naam currentDate. Standaard wijst “new Date()” automatisch de huidige datum toe aan de variabele.
  2. Maak een variabele om het aantal dag(en) op te slaan dat moet worden toegevoegdaan de datum (u kunt deze variabele overslaan en direct de waarde in de derde regel gebruiken)
  3. Verander de waardevan Datum (omdat Datum het nummer van de maanddag is die in het object is opgeslagen) door dezelfde waarde + het gewenste nummer op te geven. De overstap naar de volgende maand gaat automatisch

Antwoord 14

Een oplossing ontworpen voor de pijpleidingoperator:

const addDays = days => date => {
  const result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
};

Gebruik:

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

Als u meer functionaliteit nodig heeft, raad ik aan de datum-fns bibliotheek te zoeken.


Antwoord 15

zonder de tweede variabele te gebruiken, kunt u 7 vervangen door uw volgende x dagen:

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

Antwoord 16

om 30 dagen te ondervatten (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)

Antwoord 17

de eenvoudigste oplossing.

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

Antwoord 18

Te laat op het feest, , maar als u jQueryvervolgens gebruikt is er een uitstekende plug-in genaamd Moment:

http://momentjs.com/

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

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

En nog veel meer goede dingen!

Bewerken: jQuery-referentie verwijderd dankzij de opmerking van aikeru


Antwoord 19

U kunt JavaScript gebruiken, geen jQuery vereist:

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;

Antwoord 20

Bedankt Jason voor je antwoord dat werkt zoals verwacht, hier is een mix van je code en het handige formaat van AnthonyWJones:

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

Antwoord 21

Oud, ik weet het, maar soms vind ik dit leuk:

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

Antwoord 22

Zo simpel als dit:

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

Antwoord 23

Nee, javascript heeft geen ingebouwde functie, maar
je kunt een simpele regel code gebruiken

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

Antwoord 24

Waarom zo ingewikkeld?

Laten we aannemen dat u het aantal toe te voegen dagen opslaat in een variabele met de naam days_to_add.

Dan moet deze kort het doen:

calc_date = new Date(Date.now() +(days_to_add * 86400000));

met datum. Nu () krijgt u de daadwerkelijke UNIX-tijdstempel als milliseconden en vervolgens voegt u zoveel milliseconden toe terwijl u dagen aan wilt toevoegen.
Op een dag is 24h 60min 60s * 1000ms = 86400000 ms of 864E5.


Antwoord 25

Ik had problemen met zomertijd met de voorgestelde oplossing.

Met behulp van getUTCDate/ setUTCDateIn plaats daarvan loste ik mijn probleem op.

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

Antwoord 26

Generisch prototype zonder variabelen, het is van toepassing op een bestaande datumwaarde:

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

Antwoord 27

De Mozilla-documenten voor setdate () geven niet aan dat het eind van maandscenario’s aankleedt.
Zie https://developer.mozilla.org/en- US / docs / Javascript / Referentie / Global_Objects / Datum

Setdate ()

  • Stelt de dag van de maand (1-31) in voor een bepaalde datum volgens de lokale tijd.

Daarom gebruik ik Setime () wanneer ik dagen nodig heb.


Antwoord 28

Ik denk dat ik ook een antwoord zal geven:
Persoonlijk probeer ik het gratis declareren van variabelen, methodeaanroepen en constructoraanroepen te vermijden, omdat ze allemaal duur zijn qua prestaties. (binnen redelijke grenzen natuurlijk)
Ik wilde dit achterlaten als een opmerking onder het antwoord van @AnthonyWJones, maar dacht er beter over na.

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

Het bovenstaande respecteert de zomertijd. Dit betekent dat als u een aantal dagen toevoegt die de zomertijd overschrijden, de weergegeven tijd (uur) verandert om dat weer te geven.
Voorbeeld:
2 nov. 2014 02:00 was het einde van de zomertijd.

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

Als u de tijd wilt behouden tijdens de zomertijd (zodat 10:30 nog steeds 10:30 is)…

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

Dus, nu heb je …

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

Antwoord 29

Ik gebruik zoiets als:

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

Werkt met tijdsbesparingstijd:

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

werkt met nieuwjaar:

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

Het kan parametriseren:

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

ANTWOORD 30

Uitbreiden van prototype in JavaScript is misschien geen goed idee , vooral in professionele codebases.

Wat u wilt doen is de inheemse DateKlasse verlengen:

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)

Other episodes