Câu trả lời:
Bạn có thể tạo một cái với: -
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));
Điều này quan tâm đến việc tự động tăng tháng nếu cần thiết. Ví dụ:
8/31 + 1 ngày sẽ trở thành 9/1 .
Vấn đề với việc sử dụng setDate
trực tiếp là nó là một trình biến đổi và loại điều đó tốt nhất nên tránh. ECMA thấy phù hợp để coi Date
là một lớp có thể thay đổi hơn là một cấu trúc bất biến.
864E5
vì một số lý do tôi thích viết 24*60*60
mã của mình :)
Câu trả lời đúng :
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Câu trả lời không chính xác :
Câu trả lời này đôi khi cung cấp kết quả chính xác nhưng rất thường trả về năm và tháng sai. Lần duy nhất câu trả lời này hoạt động là khi ngày mà bạn thêm ngày sẽ xảy ra để có năm và tháng hiện tại.
// Don't do it this way!
function addDaysWRONG(date, days) {
var result = new Date();
result.setDate(date.getDate() + days);
return result;
}
Bằng chứng / Ví dụ
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
Hãy cẩn thận, bởi vì điều này có thể là khó khăn. Khi đặt "ngày mai", nó chỉ hoạt động vì giá trị hiện tại của nó khớp với năm và tháng cho "hôm nay". Tuy nhiên, cài đặt thành số ngày như "32" thông thường sẽ vẫn hoạt động tốt để chuyển nó sang tháng tiếp theo.
var d = new Date(); d.setDate( d.getDate() + 1 );
?
getDate()
trả về ngày của năm đó . Sau đó, gọi setDate
đặt ngày trong năm hiện tại . Vì vậy, nó KHÔNG phải là một giải pháp chung tốt. Câu trả lời của @ AnthonyWJones thực sự hoạt động chính xác.
var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)
đưa ra ngày 3 tháng 1 năm 2017 kéo dài 2 năm.
Giải pháp đơn giản của tôi là:
nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
giải pháp này không có vấn đề với thời gian tiết kiệm ánh sáng ban ngày. Ngoài ra, người ta có thể thêm / phụ bất kỳ khoản bù nào trong nhiều năm, tháng, ngày, v.v.
day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
là mã chính xác.
setDate
.
Những câu trả lời này có vẻ khó hiểu với tôi, tôi thích:
var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);
getTime () cung cấp cho chúng tôi một phần nghìn giây kể từ năm 1970 và 86400000 là số mili giây trong một ngày. Do đó, ms chứa mili giây cho ngày mong muốn.
Sử dụng hàm tạo mili giây cho đối tượng ngày mong muốn.
new Date(new Date('11/4/2012').getTime() + 86400000)
Thử
var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000));
Sử dụng setDate () để thêm ngày sẽ không giải quyết được vấn đề của bạn, hãy thử thêm một số ngày vào tháng 2, nếu bạn cố thêm ngày mới vào đó, điều đó sẽ không dẫn đến kết quả bạn mong đợi.
setDate()
? Có phải đây không: stackoverflow.com/questions/5497637/ từ
Chỉ cần dành nhiều thời gian cố gắng tìm ra những gì thỏa thuận với năm không thêm khi làm theo các ví dụ chính dưới đây.
Nếu bạn muốn chỉ đơn giản là thêm n ngày vào ngày bạn có thì tốt nhất bạn chỉ nên đi:
myDate.setDate (myDate.getDate () + n);
hoặc phiên bản dài
var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);
Điều này hôm nay / ngày mai là khó hiểu. Bằng cách đặt ngày hiện tại vào biến ngày mới, bạn sẽ làm rối giá trị năm. nếu bạn làm việc từ ngày ban đầu, bạn sẽ không.
Nếu bạn có thể, hãy sử dụng khoảnh khắc . JavaScript không có các phương thức ngày / thời gian riêng rất tốt. Sau đây là một ví dụ Cú pháp của 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>
Tham khảo: http://momentjs.com/docs/#/manipulation/add/
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);
Tôi đã tạo các tiện ích mở rộng này tối qua:
bạn có thể chuyển các giá trị dương hoặc âm;
thí dụ:
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;
}
Không sử dụng biến thứ hai, bạn có thể thay thế 7 bằng x ngày tiếp theo của mình:
let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
Giải pháp đơn giản nhất.
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);
Cảm ơn Jason vì câu trả lời của bạn hoạt động như mong đợi, đây là một kết hợp từ mã của bạn và định dạng tiện dụng của AnthonyWJones:
Date.prototype.addDays = function(days){
var ms = new Date().getTime() + (86400000 * days);
var added = new Date(ms);
return added;
}
Đi dự tiệc muộn, nhưng nếu bạn sử dụng có một plugin tuyệt vời có tên là Moment:jQuery
thì
var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
http://momentjs.com/docs/#/manipulation/
Và rất nhiều thứ tốt khác trong đó!
Chỉnh sửa: Tham chiếu jQuery bị xóa nhờ nhận xét của aikeru
Một giải pháp được thiết kế cho người vận hành đường ống :
const addDays = days => date => {
const result = new Date(date);
result.setDate(result.getDate() + days);
return result;
};
Sử dụng:
// Without the pipeline operator...
addDays(7)(new Date());
// And with the pipeline operator...
new Date() |> addDays(7);
Nếu bạn cần thêm chức năng, tôi khuyên bạn nên tìm hiểu thư viện date-fns .
Cũ tôi biết, nhưng đôi khi tôi thích điều này:
function addDays(days) {
return new Date(Date.now() + 864e5 * days);
}
Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
Tôi đã có vấn đề với thời gian tiết kiệm ánh sáng ban ngày với giải pháp đề xuất.
Bằng cách sử dụng getUTCDate
/ setUTCDate
thay vào đó, tôi đã giải quyết vấn đề của mình.
// 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;
}
Bạn có thể sử dụng JavaScript, không yêu cầu 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;
Nguyên mẫu chung không có biến, nó áp dụng cho giá trị Ngày hiện tại:
Date.prototype.addDays = function (days) {
return new Date(this.valueOf() + days * 864e5);
}
Các tài liệu mozilla cho setDate () không chỉ ra rằng nó sẽ xử lý các tình huống cuối tháng. Xem https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
đặt ngày()
Đó là lý do tại sao tôi sử dụng setTime () khi tôi cần thêm ngày.
Đơn giản như thế này:
new Date((new Date()).getTime() + (60*60*24*1000));
Tôi đoán tôi cũng sẽ đưa ra câu trả lời:
Cá nhân, tôi muốn tránh khai báo biến vô cớ, gọi phương thức và gọi hàm tạo, vì tất cả chúng đều đắt về hiệu năng. (trong lý do, tất nhiên)
Tôi sẽ để lại điều này như là nhận xét dưới Câu trả lời được đưa ra bởi @AnthonyWJones nhưng nghĩ tốt hơn về nó.
// 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;
};
Ở trên sẽ tôn trọng DST. Có nghĩa là nếu bạn thêm một số ngày vượt qua DST, thời gian (giờ) được hiển thị sẽ thay đổi để phản ánh điều đó.
Ví dụ:
ngày 2 tháng 11 năm 2014 02:00 là ngày kết thúc DST.
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
Nếu bạn đang tìm cách giữ lại thời gian trên DST (vì vậy 10:30 vẫn sẽ là 10:30) ...
// 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;
};
Vì vậy, bây giờ bạn có ...
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
Không, javascript không có chức năng tích hợp, nhưng bạn có thể sử dụng một dòng mã đơn giản
timeObject.setDate(timeObject.getDate() + countOfDays);
Tôi sử dụng một cái gì đó như:
new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
Hoạt động với thời gian tiết kiệm trong ngày:
new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Làm việc với năm mới:
new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
Nó có thể được tham số hóa:
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);
}
Tôi đang sử dụng giải pháp sau đây.
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);
Ngày có một hàm tạo chấp nhận một int. Đối số này biểu thị tổng số mili giây trước / sau ngày 1 tháng 1 năm 1970. Nó cũng có một phương thức setTime thực hiện tương tự mà không tạo đối tượng Ngày mới.
Những gì chúng tôi làm ở đây là chuyển đổi ngày thành mili giây và thêm giá trị này vào giá trị được cung cấp bởi getTime. Cuối cùng, chúng tôi đưa kết quả cho phương thức khởi tạo Date (mili giây) hoặc phương thức setTime (mili giây).
now.setDate(now.getDate() + days);
tự động xử lý các thay đổi DST. Và tôi phải sửa, những giây nhuận bị bỏ qua trong dấu thời gian của JS.
Chỉnh sửa:
Thay vì setTime()
(hoặc setHours()
) bạn có thể làm theo cách này:
Date.prototype.addDays= function(d){
this.setDate(this.getDate() + d);
return this;
};
var tomorrow = new Date().addDays(1);
Cũ:
Thay vì sử dụng, setTime()
bạn có thể sử dụng setHours()
:
Date.prototype.addDays= function(d){
this.setHours(this.getHours() + d * 24);
return this;
};
var tomorrow = new Date().addDays(1);
Xem JSFiddle ...
d.setDate(d.getDate() + 1);
Mã rất đơn giản để thêm ngày trong ngày trong tập lệnh java.
var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);
Có một phương thức setDate và getDate , cho phép bạn làm một cái gì đó như thế này:
var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
Nếu bạn muốn trừ cả một số ngày và định dạng ngày của bạn ở định dạng có thể đọc được, bạn nên xem xét việc tạo một DateHelper
đối tượng tùy chỉnh trông giống như thế này:
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));
(xem thêm Fiddle này )
Mở rộng nguyên mẫu trong javascript có thể không phải là một ý tưởng tốt , đặc biệt là trong các cơ sở mã chuyên nghiệp.
Những gì bạn muốn làm là mở rộng Date
lớp bản địa :
class MyCustomDate extends Date {
addDays(days) {
const date = new MyCustomDate(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)
Theo cách này, nếu một ngày Javascript thực hiện một addDays
phương thức gốc , bạn sẽ không phá vỡ bất cứ điều gì.
Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};