2017-08-16 65 views
2

我在接下來的一段JavaScript中顯示了未來日期。有沒有一種方法可以指定天數列表(WET),以便它不會着陸?例如,如果日期在聖誕節降臨,那麼它自動加1(假設它仍然是一個工作日而不是另一個假期)?集中指定要登錄的日期

這裏就是我的工作:

function addDates(startDate,noOfDaysToAdd){ 
 
    var count = 0; 
 
    while(count < noOfDaysToAdd){ 
 
    endDate = new Date(startDate.setDate(startDate.getDate() + 1)); 
 
    if(endDate.getDay() != 0 && endDate.getDay() != 6){ 
 
     //Date.getDay() gives weekday starting from 0(Sunday) to 6(Saturday) 
 
     count++; 
 
    } 
 
    } 
 
    return startDate; 
 
} 
 

 
function convertDate(d) { 
 
    function pad(s) { return (s < 10) ? '0' + s : s; } 
 
    return [pad(d.getDate()), pad(d.getMonth()+1), d.getFullYear()].join('/'); 
 
} 
 

 

 
var today = new Date(); 
 
var daysToAdd = 6; 
 
var endDate = addDates(today,daysToAdd); 
 
document.write(convertDate(endDate));

+0

你可能需要幾天的名單爲它不登陸,然後比較將來的日期,如果它匹配,通過每天向前推進,再比較,等有什麼你試過了嗎? * addDates *函數對我來說是可疑的,整個函數可以是'startDate.setDate(startDate.getDate()+ noOfDaysToAdd)'。 * getDay *的比較是不必要的,可能是錯誤的。 – RobG

+0

這幾乎是我希望得到的。你有能力提供一些代碼嗎?我很新的Javascript –

回答

0

添加天的日期是覆蓋在Add days to JavaScript Date

爲避免週末(假設週六和週日,有些地方使用不同的日子,如週四和週五),如果日期爲6(星期六)或0(週日),則可以檢查結果並向前移動。同樣,您可以使用格式化日期字符串檢查假期(比使用Date對象更容易)。

一個簡單的算法是將所需的日子添加到日期,然後如果它着陸在週末或假期,則一次添加一天,直到它不。

// Utility functions 
 
// Add days to a date 
 
function addDays(date, days) { 
 
    date.setDate(date.getDate() + days); 
 
    return date; 
 
} 
 

 
// Return true if date is Sat or Sun 
 
function isWeekend(date) { 
 
    return date.getDay() == 0 || date.getDay() == 6; 
 
} 
 

 
// Return true if date is in holidays 
 
function isHoliday(date) { 
 
    return holidays.indexOf(formatISOLocal(date)) != -1; 
 
} 
 

 
// Show formatted date 
 
function showDate(date) { 
 
    return date.toLocaleString(undefined, { 
 
    weekday:'long', 
 
    day: 'numeric', 
 
    month: 'long', 
 
    year: 'numeric' 
 
    }); 
 
} 
 

 
// Return date string in YYYY-MM-DD format 
 
function formatISOLocal(d) { 
 
    function z(n){return (n<10? '0':'')+n} 
 
    return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' + z(d.getDate()); 
 
} 
 

 
// Main function 
 
// Special add days to avoid both weekends and holidays 
 
function specialAddDays(date, days) { 
 

 
    // Add days 
 
    date.setDate(date.getDate() + days); 
 
    
 
    // While date is a holiday or weekened, keep adding days 
 
    while (isWeekend(date) || isHoliday(date)) { 
 
    addDays(date, 1); 
 
    } 
 
    return date; 
 
} 
 

 
// Holidays  Tuesday  Wednesday  Eid al-Adha Christmas 
 
var holidays = ['2017-08-22','2017-08-23', '2017-09-01', '2017-12-25']; 
 

 
// Examples 
 
var d = new Date(2017,7,18,1,30); 
 
console.log('Start day: ' + showDate(d)); // Friday 
 
specialAddDays(d, 1); 
 
console.log('Day added: ' + showDate(d)); // Monday 
 

 
// Tue and Wed are (fake) holidays, so should return Thursday 
 
specialAddDays(d, 1); 
 
console.log('Day added: ' + showDate(d));