我如何计算 2 个日期之间的范围而不计算 javascript 中的周末
how can i count the range between 2 dates without counting the weekend in javascript
我想计算 2 个日期之间的范围而不计算 javascript 中的周末。我有一些代码已经计算了它们之间的范围。但我坚持周末的部分。 YII框架中CJuiDatePicker输入的日期
<script>
function calcDay(dt1, dt2, range){
var msec1 = dt1;
var date1 = new date(msec1);
var msec2 = dt2;
var date2 = new date(msec2);
if(date1>0 || date2>0){
range.val(isFinite(Math.round(date2-date1)/86400000) || 0);
}
};
</script>
86400000 是以毫秒为单位的天
提前致谢
您需要的函数是 getUTCDay()。
伪代码如下:
1 - 确定整周(days/7 截断)
2 - 计算 weekday/weekend:2 * 结果 = 周末,5 * 结果 = 工作日。
3 - 之后,余数和星期几将决定额外的 1 或 2 天
希望对您有所帮助,如果您需要 javascript,请告诉我,
- 约翰
已按要求编辑。注意:为测试调整了您的原始版本,您应该发现需要的更改以进行恢复。
function calcDay(dt1, dt2, range)
{
var msec1 = "October 13, 2014 11:13:00";
var date1 = new Date(msec1);
var msec2 = "October 13, 2013 11:13:00";
var date2 = new Date(msec2);
var days;
var wdays;
var startday;
var nLeft;
// neither should be zero
if(date1>0 && date2>0) {
days = Math.round( Math.abs((date2-date1)/86400000) );
wdays = Math.round(days / 7) * 5;
nLeft = days % 7;
startday = (date1 > date2) ? date2.getUTCDay() : date1.getUTCDay();
if (startday < 2) {
wdays += Math.max(nLeft+startday-1,0);
} else if (startday == 6) {
wdays += Math.max(nLeft-2,0);
} else if (nLeft > (7-startday)) {
wdays += (nLeft-2)
} else {
wdays += Math.min(nLeft, 6-startday)
}
}
};
我找到了自己的解决方案,但忘记分享了。我就是这样做的
function myUpdate(dt1, dt2,range){
var msec1 = dt1;
var date1 = new Date(msec1);
var msec2 = dt2;
var date2 = new Date(msec2);
var diff = (isFinite(Math.round (date2 - date1) / 86400000) && Math.round (date2 - date1) / 86400000 || 0);
var wEnd=0;
if(date1>0 || date2>0){
for(var i=0; i<=diff; i++){
if(date1.getDay() ==6 || date1.getDay()==0){
wEnd = wEnd + 1;
}
date1.setDate(date1.getDate() + 1);
}
}
range.val(Math.round((diff-wEnd)+1));
};
首先你应该计算不同的日期,然后 date1
将检查是星期天还是星期六。然后date1
会加1直到date1
的值等于date2
。如果 date1
is/are 周六或周日,wEnd
将获得 1。所以你可以用 wEnd
减去 diff
。希望对大家有帮助
我想计算 2 个日期之间的范围而不计算 javascript 中的周末。我有一些代码已经计算了它们之间的范围。但我坚持周末的部分。 YII框架中CJuiDatePicker输入的日期
<script>
function calcDay(dt1, dt2, range){
var msec1 = dt1;
var date1 = new date(msec1);
var msec2 = dt2;
var date2 = new date(msec2);
if(date1>0 || date2>0){
range.val(isFinite(Math.round(date2-date1)/86400000) || 0);
}
};
</script>
86400000 是以毫秒为单位的天
提前致谢
您需要的函数是 getUTCDay()。
伪代码如下:
1 - 确定整周(days/7 截断)
2 - 计算 weekday/weekend:2 * 结果 = 周末,5 * 结果 = 工作日。
3 - 之后,余数和星期几将决定额外的 1 或 2 天
希望对您有所帮助,如果您需要 javascript,请告诉我, - 约翰
已按要求编辑。注意:为测试调整了您的原始版本,您应该发现需要的更改以进行恢复。
function calcDay(dt1, dt2, range)
{
var msec1 = "October 13, 2014 11:13:00";
var date1 = new Date(msec1);
var msec2 = "October 13, 2013 11:13:00";
var date2 = new Date(msec2);
var days;
var wdays;
var startday;
var nLeft;
// neither should be zero
if(date1>0 && date2>0) {
days = Math.round( Math.abs((date2-date1)/86400000) );
wdays = Math.round(days / 7) * 5;
nLeft = days % 7;
startday = (date1 > date2) ? date2.getUTCDay() : date1.getUTCDay();
if (startday < 2) {
wdays += Math.max(nLeft+startday-1,0);
} else if (startday == 6) {
wdays += Math.max(nLeft-2,0);
} else if (nLeft > (7-startday)) {
wdays += (nLeft-2)
} else {
wdays += Math.min(nLeft, 6-startday)
}
}
};
我找到了自己的解决方案,但忘记分享了。我就是这样做的
function myUpdate(dt1, dt2,range){
var msec1 = dt1;
var date1 = new Date(msec1);
var msec2 = dt2;
var date2 = new Date(msec2);
var diff = (isFinite(Math.round (date2 - date1) / 86400000) && Math.round (date2 - date1) / 86400000 || 0);
var wEnd=0;
if(date1>0 || date2>0){
for(var i=0; i<=diff; i++){
if(date1.getDay() ==6 || date1.getDay()==0){
wEnd = wEnd + 1;
}
date1.setDate(date1.getDate() + 1);
}
}
range.val(Math.round((diff-wEnd)+1));
};
首先你应该计算不同的日期,然后 date1
将检查是星期天还是星期六。然后date1
会加1直到date1
的值等于date2
。如果 date1
is/are 周六或周日,wEnd
将获得 1。所以你可以用 wEnd
减去 diff
。希望对大家有帮助