Question Ajouter des jours à JavaScript Date


Comment ajouter des jours au courant Date en utilisant JavaScript. Est-ce que JavaScript a une fonction intégrée comme .Net AddDay?


719
2018-02-18 23:57


origine


Réponses:


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 soin d'incrémenter automatiquement le mois si nécessaire. Par exemple:

8/31 + 1 jour deviendra 9/1.

Le problème avec l'utilisation setDate directement est que c'est un mutateur et ce genre de chose est préférable d'éviter. ECMA vu apte à traiter Date comme une classe mutable plutôt qu'une structure immuable.


805
2018-02-19 00:10



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 fournit le bon résultat mais renvoie très souvent la mauvaise année et le mois. La seule fois où cette réponse fonctionne, c'est quand la date à laquelle vous ajoutez des jours se produit pour avoir l'année et le 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

Vérifiez cette JsFiddle

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


566
2017-10-30 18:55



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

Soyez prudent, car cela peut être difficile. Lorsque vous définissez "demain", cela ne fonctionne que parce que sa valeur actuelle correspond à l'année et au mois pour "aujourd'hui". Cependant, le réglage d'un numéro de date comme "32" fonctionnera normalement très bien pour le déplacer au mois suivant.


143
2018-02-19 00:01



Ma solution 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 / sous n'importe quels compensations 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.


63
2017-12-03 23:42



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 dans une journée. Par conséquent, ms contient des millisecondes pour la date souhaitée.

L'utilisation du constructeur milliseconde donne l'objet de date désiré.


62
2018-02-15 03:56



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.


41
2018-05-02 10:01



Juste passé des âges à essayer de comprendre ce que l'affaire était avec l'année ne pas ajouter en suivant les exemples de plomb ci-dessous.

Si vous voulez simplement ajouter n jours à la date que vous avez, vous êtes le 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 allez gâcher la valeur de l'année. Si vous travaillez à partir de la date d'origine, vous ne le ferez pas.


27
2018-02-14 04:15



Si vous le pouvez, utilisez moment.js. JavaScript n'a pas de très bonnes méthodes de date / heure natives. 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/


19
2017-12-22 04:46



J'ai créé ces extensions la nuit dernière:
vous pouvez passer 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;
}

18
2018-04-05 03:15



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


13
2017-12-01 10:03