2017-10-10 92 views
0

所以我還挺停留在找出某一方面。我想要做的是以下幾點:排除週末日期從工作日的JavaScript

比方說,我只是簡單的日期顯示,它會顯示一個日期,如October 10th, 2017到最終用戶。然後有一個選項,以從所述日期減去一定天數的(的1,2,3的偏移量時,選擇任何偏移)。

我所希望做的完全是從計數排除週末日期 - 所以,如果今天是Monday, October 9th偏移的1選擇,它進入Friday the 6th;如果的2偏移被選擇,它進入Thursday the 5th;一個偏移去Wednesday the 4th ...

如果今天是Wednesday, October 11th,一個的2偏移會帶你到Monday the 9th,一個的4偏移會去Thursday the 5th,等等(完全計數/減法對登陸該日)時忽略/跳過週末日期。

我到目前爲止只能找到功能的答案,以計算週末以外的工作天數和這種性質的事情(我已經有,使用了momentjs-business npm模塊,但不是正是我所需要的)。

我沒有張貼代碼,因爲這是一個更大的代碼庫的一部分,我覺得張貼片段只會增加混亂,因爲我相信這個問題是相對簡單和直接的;我不想過於複雜。

我希望在設置從顯示給用戶的日期(向用戶顯示的日期來自數據庫)的偏移量時根本不包括週末。

我希望這一切都有意義,如果需要更多的信息,請讓我知道。在此先感謝任何能指引我朝着正確方向的人!

+0

我不明白爲什麼有人低估了 - 我做了我的研究,對於我發佈的具體問題沒有答案,這就是我發佈它的原因。不明白爲什麼需要downvote,但如果我看起來不夠努力,有人請指出,謝謝... – Lushmoney

+0

將偏移總是減去天? – kemotoe

+0

是的,無論選擇何種偏移量,該天數總是會被減去(*除非當然是0,但沒有人會選擇0天偏移量...... *) – Lushmoney

回答

1

這將實現你想要我想的。請注意,這是非常低效的。如果偏移量非常大,則會在循環的每次迭代中生成一個新日期。隨着一些修修補補就可以優化

let startDate = new Date('10/10/2017'); 
let endDate = "", offset = 2; 
while(offset > 0){ 
    endDate = new Date(startDate.setDate(startDate.getDate() - 1)); 
    if(endDate.getDay() !== 0 && endDate.getDay() !== 6){ 
     offset--; 
    } 
} 

這裏是一個工作Fiddle

+0

是的,絕對低效,但正是我正在尋找!對於我的特殊用例,用戶偏移永遠不會超過5。非常感謝你!! – Lushmoney

0

javascript日期對象有,告訴你今天是什麼日子一週中的getDay()方法。你可以用它來確定哪些日期是週末,並排除它們。

var date = new Date(); 
var dayOfWeek = date.getDay(); 
console.log(dayOfWeek) // 1 for Monday, 2 for Tuesday, etc. 
+0

當然是的 - 那是我第一次用原生JS和moment.js做了,它確實排除了他們發現哪一天是週末,哪些不是,但是它不符合我打算的方式。它只在所選擇的偏移量結束於某一天(星期六或星期天)時起作用,但如果我們在星期三的第十一天,則選擇偏移量爲5,它將在星期五至星期五(因爲當它倒計數5天,它從來沒有在週末的一天),但我需要的是它甚至不考慮週末作爲計數的一部分,並在週三結束第4天 – Lushmoney

1

可以使用moment-business庫。它有subtractWeekDays表示:

從這一刻減去星期幾,修改原始時刻。返回時刻。

你的代碼可能是這樣的:

var m = moment("October 10th, 2017", "MMMM Do, YYYY"); 
business.subtractWeekDays(m, 2); 

如果你不希望添加外部庫,看看addWeekDayssubtractWeekDays代碼。

+0

這有助於很多,謝謝! – Lushmoney