Tôi đang cố gắng tạo một tập lệnh đơn giản cung cấp cho tôi ngày tái chế tiếp theo dựa trên lịch trình hai tuần một lần bắt đầu từ ngày 6 tháng 7 năm 2011. Vì vậy, tôi đã tạo chức năng đơn giản này .. .Toán ngày tháng javascript đơn giản ... không thực sự
function getNextDate(startDate) {
if (today <= startDate) {
return startDate;
}
// calculate the day since the start date.
var totalDays = Math.ceil((today.getTime()-startDate.getTime())/(one_day));
// check to see if this day falls on a recycle day
var bumpDays = totalDays%14; // mod 14 -- pickup up every 14 days...
// pickup is today
if (bumpDays == 0) {
return today;
}
// return the closest day which is in 14 days, less the # of days since the last
// pick up..
var ms = today.getTime() + ((14- bumpDays) * one_day);
return new Date(ms);
}
và có thể gọi nó như thế ...
var today=new Date();
var one_day=1000*60*60*24; // one day in milliseconds
var nextDate = getNextDate(new Date(2011,06,06));
cho đến nay rất tốt ... nhưng khi tôi dự án "ngày nay" đến 2011/10/27, tôi nhận được thứ Ba 11/8/2011 là ngày kế tiếp thay vì thứ tư 11/9/2011 ... Thực tế mỗi ngày từ nay đến hết ngày 26/10/2011 dự án đón đúng ... và mỗi ngày từ ngày 27/10/2011 đến hết ngày 2/28/2012 dự án thứ ba và không phải là thứ tư. Và sau đó mỗi ngày từ ngày 29/2/2012 (năm nhuận) đến ngày 24/10/2012 (hmmm tháng 10 một lần nữa) dự án thứ tư chính xác. Tôi đang thiếu gì? Bất kỳ trợ giúp sẽ được đánh giá cao ..
V
Không nên có sàn nhà? Bởi vì bạn sử dụng 2011-06-06 1: 00u totalDays sẽ là 1 và lượt đón tiếp theo sẽ là 13 ngày không 14 ngày, do đó, một ngày thứ ba. – Gerben
Có vẻ lạ. Tôi nhận được ngày chính xác với 'one_day = 1000 * 60 * 60 * 24; hôm nay = ngày mới (2011,8,27); nextDate = getNextDate (ngày mới (2011,6,6)); ', và nextDate là' Wed Sep 28 2011 00:00:00 GMT + ', đó là đúng? Thử nghiệm trên FF4. – Raze
startDate luôn là ngày mới (2011,06,06) - vì vậy nó không được di chuyển – user799301