Kütüphane Kullanma
Çok fazla tarih çalışması yapıyorsanız, Datejs veya Moment.js gibi JavaScript tarih kitaplıklarına bakmak isteyebilirsiniz . Örneğin, Moment.js ile bu sadece:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
Vanilya Javascript
Bu kaosun cevabı gibidir , ancak bir satırda:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
Nerede diff
dan istediğiniz dakika içinde farkı oldDateObj
zamanı. Olumsuz bile olabilir.
Veya tekrar kullanılabilir bir işlev olarak, bunu birden fazla yerde yapmanız gerekiyorsa:
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
Ve bu açık değilse, dakikaları çarpmamızın nedeni 60000
dakikaları milisaniyeye dönüştürmektir.
Vanilya Javascript ile Dikkatli Olun. Tarihler Zor!
Yarının tarihini almak için bir tarihe 24 saat ekleyebileceğinizi düşünebilirsiniz, değil mi? Yanlış!
addMinutes(myDate, 60*24); //DO NOT DO THIS
Kullanıcının gün ışığından yararlanma saatini gözlemlemesi durumunda, bir günün 24 saat olması gerekmez. Yılda bir gün sadece 23 saat, yılda bir gün 25 saat. Örneğin, Amerika Birleşik Devletleri ve Kanada'nın çoğunda, 2 Kasım 2014 gece yarısından 24 saat sonra hala 2 Kasım:
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!
Bu nedenle , yukarıda bahsedilen kütüphanelerden birini kullanmak, bununla çok fazla iş yapmanız gerektiğinde daha güvenli bir bahistir .
Aşağıda yazdığım bu fonksiyonun daha genel bir versiyonu var. Hala bir kütüphane kullanmanızı öneririm, ancak bu projeniz için aşırı / imkansız olabilir. Sözdizimi MySQL DATE_ADD işlevinden sonra modellenmiştir .
/**
* 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;
}
Çalışma jsFiddle demosu .