1131 Stimmen

Wie kann man 30 Minuten zu einem JavaScript-Datumsobjekt hinzufügen?

Ich möchte ein Datumsobjekt erhalten, das 30 Minuten später als ein anderes Datumsobjekt ist. Wie kann ich das mit JavaScript erreichen?

1308voto

Kip Punkte 102702

Verwendung einer Bibliothek

Wenn Sie viel mit Datumsangaben arbeiten, sollten Sie sich vielleicht mit JavaScript-Datumsbibliotheken wie Datejs ou Moment.js . Bei Moment.js ist dies zum Beispiel einfach:

var newDateObj = moment(oldDateObj).add(30, 'm').toDate();

Vanille-Javascript

Das ist wie Die Antwort des Chaos , aber in einer Zeile:

var newDateObj = new Date(oldDateObj.getTime() + diff*60000);

Wo diff ist die Differenz in Minuten, die Sie von oldDateObj der Zeit. Sie kann sogar negativ sein.

Oder als wiederverwendbare Funktion, wenn Sie dies an mehreren Stellen tun müssen:

function addMinutes(date, minutes) {
    return new Date(date.getTime() + minutes*60000);
}

Und falls es nicht offensichtlich ist: Der Grund, warum wir die Minuten mit 60000 ist die Umrechnung von Minuten in Millisekunden.

Seien Sie vorsichtig mit Vanilla Javascript. Daten sind hart!

Sie denken vielleicht, dass Sie 24 Stunden zu einem Datum hinzufügen können, um das morgige Datum zu erhalten, oder? Falsch!

addMinutes(myDate, 60*24); //DO NOT DO THIS

Es stellt sich heraus, dass ein Tag nicht unbedingt 24 Stunden lang ist, wenn der Benutzer die Sommerzeit einhält. Es gibt einen Tag im Jahr, der nur 23 Stunden lang ist, und einen Tag im Jahr, der 25 Stunden lang ist. In den meisten Teilen der Vereinigten Staaten und Kanadas ist beispielsweise der 2. November 2014 auch 24 Stunden nach Mitternacht noch der 2. November:

const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

Das ist der Grund die Verwendung einer der oben genannten Bibliotheken ist eine sichere Sache wenn Sie viel damit arbeiten müssen.

Nachstehend finden Sie eine allgemeinere Version dieser Funktion, die ich geschrieben habe. Ich würde immer noch empfehlen, eine Bibliothek zu verwenden, aber das könnte für Ihr Projekt zu aufwendig/unmöglich sein. Die Syntax ist modelliert nach MySQL DATE_ADD Funktion.

/**
 * Adds time to a date. Modelled after MySQL DATE_ADD function.
 * Example: dateAdd(new Date(), 'minute', 30)  //returns 30 minutes from now.
 * https://stackoverflow.com/a/1214753/18511
 * 
 * @param date  Date to start with
 * @param interval  One of: year, quarter, month, week, day, hour, minute, second
 * @param units  Number of units of the given interval to add.
 */
function dateAdd(date, interval, units) {
  if(!(date instanceof Date))
    return undefined;
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(String(interval).toLowerCase()) {
    case 'year'   :  ret.setFullYear(ret.getFullYear() + units); checkRollover();  break;
    case 'quarter':  ret.setMonth(ret.getMonth() + 3*units); checkRollover();  break;
    case 'month'  :  ret.setMonth(ret.getMonth() + units); checkRollover();  break;
    case 'week'   :  ret.setDate(ret.getDate() + 7*units);  break;
    case 'day'    :  ret.setDate(ret.getDate() + units);  break;
    case 'hour'   :  ret.setTime(ret.getTime() + units*3600000);  break;
    case 'minute' :  ret.setTime(ret.getTime() + units*60000);  break;
    case 'second' :  ret.setTime(ret.getTime() + units*1000);  break;
    default       :  ret = undefined;  break;
  }
  return ret;
}

Funktionierende jsFiddle-Demo .

360voto

Jamie Punkte 5576
var d1 = new Date (),
    d2 = new Date ( d1 );
d2.setMinutes ( d1.getMinutes() + 30 );
alert ( d2 );

210voto

chaos Punkte 118918
var oldDateObj = new Date();
var newDateObj = new Date();
newDateObj.setTime(oldDateObj.getTime() + (30 * 60 * 1000));
console.log(newDateObj);

134voto

Teo Graca Punkte 1271
var now = new Date();
now.setMinutes(now.getMinutes() + 30); // timestamp
now = new Date(now); // Date object
console.log(now);

68voto

Tyler Carter Punkte 58971

Vielleicht so etwas wie das hier?

var d = new Date();
var v = new Date();
v.setMinutes(d.getMinutes()+30);

console.log(v)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X