Comment ajouter des jours à la Date
courante en utilisant JavaScript. JavaScript a-t-il une fonction intégrée telle que la variable AddDay
de .Net?
Vous pouvez en créer un avec: -
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));
Cela prend en charge d'incrémenter automatiquement le mois si nécessaire. Par exemple:
8/31 + 1 jour deviendra 9/1 .
Le problème lié à l’utilisation directe de setDate
est que c’est un mutateur et que ce genre de chose est préférable. L’ECMA a jugé bon de traiter Date
comme une classe mutable plutôt que comme une structure immuable.
Bonne réponse:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Réponse incorrecte:
Cette réponse parfois donne le résultat correct mais renvoie très souvent l'année et le mois erronés. Cette réponse ne fonctionne que lorsque la date à laquelle vous ajoutez des jours correspond à l'année et au mois en cours.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Preuve/Exemple
// Correct
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
// Bad Year/Month
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
// Bad during DST
function addDaysDstFail(date, days) {
var dayms = (days * 24 * 60 * 60 * 1000);
return new Date(date.getTime() + dayms);
}
// TEST
function formatDate(date) {
return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
}
$('tbody tr td:first-child').each(function () {
var $in = $(this);
var $out = $('<td/>').insertAfter($in).addClass("answer");
var $outFail = $('<td/>').insertAfter($out);
var $outDstFail = $('<td/>').insertAfter($outFail);
var date = new Date($in.text());
var correctDate = formatDate(addDays(date, 1));
var failDate = formatDate(addDaysWRONG(date, 1));
var failDstDate = formatDate(addDaysDstFail(date, 1));
$out.text(correctDate);
$outFail.text(failDate);
$outDstFail.text(failDstDate);
$outFail.addClass(correctDate == failDate ? "right" : "wrong");
$outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong");
});
body {
font-size: 14px;
}
table {
border-collapse:collapse;
}
table, td, th {
border:1px solid black;
}
td {
padding: 2px;
}
.wrong {
color: red;
}
.right {
color: green;
}
.answer {
font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<th colspan="4">DST Dates</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>03/10/2013</td></tr>
<tr><td>11/03/2013</td></tr>
<tr><td>03/09/2014</td></tr>
<tr><td>11/02/2014</td></tr>
<tr><td>03/08/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr>
<th colspan="4">2013</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2013</td></tr>
<tr><td>02/01/2013</td></tr>
<tr><td>03/01/2013</td></tr>
<tr><td>04/01/2013</td></tr>
<tr><td>05/01/2013</td></tr>
<tr><td>06/01/2013</td></tr>
<tr><td>07/01/2013</td></tr>
<tr><td>08/01/2013</td></tr>
<tr><td>09/01/2013</td></tr>
<tr><td>10/01/2013</td></tr>
<tr><td>11/01/2013</td></tr>
<tr><td>12/01/2013</td></tr>
<tr>
<th colspan="4">2014</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2014</td></tr>
<tr><td>02/01/2014</td></tr>
<tr><td>03/01/2014</td></tr>
<tr><td>04/01/2014</td></tr>
<tr><td>05/01/2014</td></tr>
<tr><td>06/01/2014</td></tr>
<tr><td>07/01/2014</td></tr>
<tr><td>08/01/2014</td></tr>
<tr><td>09/01/2014</td></tr>
<tr><td>10/01/2014</td></tr>
<tr><td>11/01/2014</td></tr>
<tr><td>12/01/2014</td></tr>
<tr>
<th colspan="4">2015</th>
</tr>
<tr>
<th>Input</th>
<th>+1 Day</th>
<th>+1 Day Fail</th>
<th>+1 Day DST Fail</th>
</tr>
<tr><td>01/01/2015</td></tr>
<tr><td>02/01/2015</td></tr>
<tr><td>03/01/2015</td></tr>
<tr><td>04/01/2015</td></tr>
<tr><td>05/01/2015</td></tr>
<tr><td>06/01/2015</td></tr>
<tr><td>07/01/2015</td></tr>
<tr><td>08/01/2015</td></tr>
<tr><td>09/01/2015</td></tr>
<tr><td>10/01/2015</td></tr>
<tr><td>11/01/2015</td></tr>
<tr><td>12/01/2015</td></tr>
</tbody>
</table>
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Soyez prudent, car cela peut être délicat. Lors du réglage de "demain", cela ne fonctionne que parce que sa valeur actuelle correspond à l'année et au mois pour "aujourd'hui". Cependant, le réglage sur un numéro de date tel que "32" fonctionnera toujours normalement pour le déplacer au mois suivant.
Ma solution simple est:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
cette solution n'a pas de problème avec l'heure d'été. En outre, on peut ajouter/remplacer n'importe quelle compensation pour des années, des mois, des jours, etc.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
est le code correct.
Ces réponses me semblent confuses, je préfère:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () nous donne des millisecondes depuis 1970 et 86400000 est le nombre de millisecondes par jour. Par conséquent, ms contient des millisecondes pour la date souhaitée.
L'utilisation du constructeur millisecondes donne l'objet de date souhaité.
Essayer
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Utiliser setDate () pour ajouter une date ne résoudra pas votre problème. Essayez d’ajouter quelques jours à un mois de février. Si vous essayez d’ajouter de nouveaux jours, cela ne donnera pas ce que vous attendiez.
Je viens de passer une éternité à essayer de déterminer l’entente conclue avec l’année en ne l’ajoutant pas en suivant les exemples principaux ci-dessous.
Si vous voulez simplement ajouter n jours à la date que vous avez, il vaut mieux aller:
myDate.setDate (myDate.getDate () + n);
ou la version longwinded
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Ce truc d’aujourd’hui/demain est déroutant. En définissant la date actuelle dans votre nouvelle variable de date, vous ferez foirer la valeur de l'année. si vous travaillez à partir de la date d'origine, vous ne le ferez pas.
Si vous le pouvez, utilisez moment.js . JavaScript n'a pas de très bonnes méthodes natives de date/heure. Voici un exemple de syntaxe de 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>
Référence: http://momentjs.com/docs/#/manipulating/add/
J'ai créé ces extensions hier soir:
vous pouvez transmettre des valeurs positives ou négatives;
exemple:
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;
}
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);
La solution la plus simple.
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);
En retard à la fête, mais si vous utilisez il y a un excellent plugin appelé Moment:jQuery
alors
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulating/
Et plein d'autres bonnes choses là-dedans!
Edit: référence jQuery supprimée grâce au commentaire de aikeru
Merci Jason pour votre réponse qui fonctionne comme prévu. Voici un mélange de votre code et du format pratique d'AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Vieux je sais, mais parfois j'aime ça:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Non, javascript n'a pas de fonction intégrée, mais vous pouvez utiliser une simple ligne de code.
timeObject.setDate(timeObject.getDate() + countOfDays);
Les documents mozilla de setDate () n'indiquent pas qu'il gérera les scénarios de fin de mois . Voir https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
régler la date()
C'est pourquoi j'utilise setTime () lorsque j'ai besoin d'ajouter des jours.
Je suppose que je vais aussi donner une réponse:
Personnellement, j'aime bien éviter la déclaration de variable, les appels de méthode et les appels de constructeur gratuits, car ils coûtent cher en performances. (dans des limites raisonnables, bien sûr)
J'allais laisser cela comme un commentaire sous la réponse donnée par @AnthonyWJones mais j'ai réfléchi mieux.
// 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;
};
Ce qui précède respectera l'heure d'été. Cela signifie que si vous ajoutez un nombre de jours qui se croisent à l'heure d'été, l'heure affichée (heure) changera en conséquence.
Exemple:
2 nov. 2014 02:00 était la fin de l'heure d'été.
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
Si vous souhaitez conserver l'heure d'été (10h30 sera toujours 10h30) ...
// 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;
};
Alors, maintenant vous avez ...
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
J'ai eu des problèmes avec l'heure avancée avec la solution proposée.
En utilisant getUTCDate
/setUTCDate
à la place, j'ai résolu mon problème.
// 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;
}
J'utilise quelque chose comme:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Fonctionne avec l'heure avancée:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Fonctionne avec le nouvel an:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Il peut être paramétré:
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);
}
Sans utiliser la deuxième variable, vous pouvez remplacer 7 par vos x prochains jours:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
J'utilise la solution suivante.
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 date a un constructeur qui accepte un int. Cet argument représente le total en millisecondes avant/après le 1er janvier 1970. Il possède également une méthode setTime qui fait la même chose sans créer un nouvel objet Date.
Ce que nous faisons ici, c'est convertir des jours en millisecondes et ajouter cette valeur à la valeur fournie par getTime. Enfin, nous donnons le résultat au constructeur Date (millisecondes) ou à la méthode setTime (millisecondes).
Edit: Au lieu de setTime()
(ou setHours()
), procédez comme suit:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Vieux:
Au lieu d'utiliser setTime()
, vous pouvez utiliser setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Voir le JSFiddle ...
Code très simple pour ajouter des jours en Javascript.
var d = new Date();
d.setDate(d.getDate() + Prompt('how many days you want to add write here'));
alert(d);
Notre équipe considère date-fns comme la meilleure bibliothèque de cet espace. Il traite les dates comme immuable ( Moment.js n'adoptera probablement jamais l'immutabilité ), il est plus rapide et peut être chargé de manière modulaire.
const newDate = DateFns.addDays(oldDate, 2);
Il existe une méthode setDate et une méthode getDate , qui vous permet de faire quelque chose comme ceci:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Si vous souhaitez à la fois soustraire un nombre de jours et formater votre date dans un format lisible par l'homme, vous devriez envisager de créer un objet DateHelper
personnalisé ressemblant à ceci:
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));
(voir aussi this Fiddle )
essaye ça
function addDays(date,days) {
var one_day=1000*60*60*24;
return new Date(date.getTime()+(days*one_day)).toLocaleDateString();
}
Vous pouvez utiliser JavaScript, pas besoin de 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;
//the_day is 2013-12-31
var the_day = Date.UTC(2013, 11, 31);
// Now, the_day will be "1388448000000" in UTC+8;
var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000);
// Now, the_next_day will be "Wed Jan 01 2014 08:00:00 GMT+0800"
Pour ceux qui utilisent Angular:
Il suffit de faire:
$scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
$scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);
Vous pouvez créer votre fonction d'assistance personnalisée ici
function plusToDate(currentDate, unit, howMuch) {
var config = {
second: 1000, // 1000 miliseconds
minute: 60000,
hour: 3600000,
day: 86400000,
week: 604800000,
month: 2592000000, // Assuming 30 days in a month
year: 31536000000 // Assuming 365 days in year
};
var now = new Date(currentDate);
return new Date(now + config[unit] * howMuch);
}
var today = new Date();
var theDayAfterTommorow = plusToDate(today, 'day', 2);
A propos, c'est une solution générique pour ajouter des secondes, des minutes ou des jours à votre guise.
Prototype générique sans variable, il s’applique à une valeur Date existante:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
function addDays(n){
var t = new Date();
t.setDate(t.getDate() + n);
var month = "0"+(t.getMonth()+1);
var date = "0"+t.getDate();
month = month.slice(-2);
date = date.slice(-2);
var date = date +"/"+month +"/"+t.getFullYear();
alert(date);
}
addDays(5);
J'ai utilisé cette approche pour obtenir la bonne date sur une ligne afin d'obtenir l'heure et un jour après ce que les gens disaient ci-dessus.
((new Date()).setDate((new Date()).getDate()+1))
J'ai juste pensé que je construirais à partir d'un (new Date())
normal:
(new Date()).getDate()
> 21
En utilisant le code ci-dessus, je peux maintenant définir tout cela dans Date()
dans (new Date())
et cela se comporte normalement.
(new Date(((new Date()).setDate((new Date()).getDate()+1)))).getDate()
> 22
ou pour obtenir l'objet Date
:
(new Date(((new Date()).setDate((new Date()).getDate()+1))))
soustraire 30 jours d'utilisation
new Date(+yourDate - 30 *86400000)
var yourDate=new Date();
var d = new Date(+yourDate - 30 *86400000)
console.log(d)
2,39 Ko minifiée. Un fichier. https://github.com/rhroyston/clock-js
console.log(clock.what.weekday(clock.now + clock.unit.days)); //"wednesday"
console.log(clock.what.weekday(clock.now + (clock.unit.days * 2))); //"thursday"
console.log(clock.what.weekday(clock.now + (clock.unit.days * 3))); //"friday"
<script src="https://raw.githubusercontent.com/rhroyston/clock-js/master/clock.min.js"></script>
js-joda est une superbe bibliothèque immuable de date et d'heure pour javascript. C'est un port de Java-8 DateTime ( JSR-310 ) qui est le successeur de la célèbre bibliothèque Joda-Time . Voici un extrait de son aide-mémoire.
Ajouter 17 jours à aujourd'hui
LocalDate.now().plusDays(17);
Vous pouvez également créer la date souhaitée à partir de plusieurs opérations à la fois.
LocalDate.now()
.plusMonths(1)
.withDayOfMonth(1)
.minusDays(17);
Ou:
var d = LocalDate.parse('2019-02-23');
d.minus(Period.ofMonths(3).plusDays(3)); // '2018-11-20'
Utilisez js-joda . C'est une bibliothèque immuable de date et d'heure immuable pour javascript . Voici un extrait de son aide-mémoire.
Ajouter 17 jours à aujourd'hui
LocalDate.now().plusDays(17);
Vous pouvez également créer la date souhaitée à partir de plusieurs opérations à la fois.
LocalDate.now()
.plusMonths(1)
.withDayOfMonth(1)
.minusDays(17);
Ou:
var d = LocalDate.parse('2019-02-23');
d.minus(Period.ofMonths(3).plusDays(3)); // '2018-11-20'
Aussi simple que cette nouvelle Date ((nouvelle Date ()). GetTime () + (60 * 60 * 24 * 1000));
Je n'arrive pas à croire qu'il n'y a pas de solution cut'n'paste dans ce fil après5 ans!
SO: Pour obtenir la même heure de la journée indépendamment des interférences d’été:
Date.prototype.addDays = function(days)
{
var dat = new Date( this.valueOf() )
var hour1 = dat.getHours()
dat.setTime( dat.getTime() + days * 86400000) // 24*60*60*1000 = 24 hours
var hour2 = dat.getHours()
if (hour1 != hour2) // summertime occured +/- a WHOLE number of hours thank god!
dat.setTime( dat.getTime() + (hour1 - hour2) * 3600000) // 60*60*1000 = 1 hour
return dat
or
this.setTime( dat.getTime() ) // to modify the object directly
}
Là. Terminé!
Pour ce faire, le moyen le plus simple consiste à utiliser la bibliothèque date-fns.
var addDays = require('date-fns/add_days')
addDays(date, amount)
La documentation est disponible dans ce lien ici . Vous pouvez également le faire en utilisant moment.js. Le lien de référence est ici
J'espère que ça aide!