Sử dụng thư viện
Nếu bạn đang làm nhiều công việc hẹn hò, bạn có thể muốn xem xét các thư viện ngày JavaScript như Datejs hoặc Moment.js . Ví dụ: với Moment.js, điều này chỉ đơn giản là:
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
Vani Javascript
Đây giống như câu trả lời của sự hỗn loạn , nhưng trong một dòng:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
Đâu diff
là sự khác biệt về số phút bạn muốn từ oldDateObj
thời gian. Nó thậm chí có thể là tiêu cực.
Hoặc là một chức năng có thể sử dụng lại, nếu bạn cần làm điều này ở nhiều nơi:
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
Và chỉ trong trường hợp điều này không rõ ràng, lý do chúng tôi nhân số phút 60000
là để chuyển đổi phút thành mili giây.
Hãy cẩn thận với Vanilla Javascript. Ngày tháng thật khó!
Bạn có thể nghĩ rằng bạn có thể thêm 24 giờ vào một ngày để có được ngày mai, phải không? Sai lầm!
addMinutes(myDate, 60*24); //DO NOT DO THIS
Hóa ra, nếu người dùng quan sát thời gian tiết kiệm ánh sáng ban ngày, một ngày không nhất thiết phải dài 24 giờ. Có một ngày một năm chỉ dài 23 giờ, và một ngày một năm dài 25 giờ. Ví dụ: ở hầu hết Hoa Kỳ và Canada, 24 giờ sau nửa đêm, ngày 2 tháng 11 năm 2014, vẫn là ngày 2 tháng 11:
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!
Đây là lý do tại sao sử dụng một trong những thư viện được đề cập ở trên là đặt cược an toàn hơn nếu bạn phải thực hiện nhiều công việc với điều này.
Dưới đây là một phiên bản chung hơn của chức năng này mà tôi đã viết. Tôi vẫn khuyên bạn nên sử dụng thư viện, nhưng điều đó có thể là quá mức / không thể đối với dự án của bạn. Cú pháp được mô hình hóa sau hàm MySQL DATE_ADD .
/**
* 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;
}
Làm việc demo jsFiddle .