2017-10-10 93 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