我的要求如下
我有两个约会,我需要找到星期六和星期日之间的星期日
日期1:02/06/2011
日期2:02/07/2011
10天是周末
谢谢
作者Srini
答案 0 :(得分:7)
O(1)解决方案没有循环:
function countWeekendDays( d0, d1 )
{
var ndays = 1 + Math.round((d1.getTime()-d0.getTime())/(24*3600*1000));
var nsaturdays = Math.floor( (d0.getDay()+ndays) / 7 );
return 2*nsaturdays + (d0.getDay()==0) - (d1.getDay()==6);
}
答案 1 :(得分:5)
编辑计算周末天数而不是周末数。 http://jsfiddle.net/bRgUq/3/
function CalculateWeekendDays(fromDate, toDate){
var weekendDayCount = 0;
while(fromDate < toDate){
fromDate.setDate(fromDate.getDate() + 1);
if(fromDate.getDay() === 0 || fromDate.getDay() == 6){
++weekendDayCount ;
}
}
return weekendDayCount ;
}
console.log(CalculateWeekendDays(new Date(2011, 6, 2), new Date(2011, 7, 2)));
答案 2 :(得分:1)
根据您的日期,它们不是美国格式(至少不是如果它们之间有10个周末日)。您可以使用美国格式获取它们,例如......
var chunks = str.split('/');
str = [chunks[1], chunks[0], chunks[2]].join('/');
此代码循环显示日期之间的每一天,如果日期是星期六或星期日,则递增计数器。
var start = new Date('06/02/2011'),
finish = new Date('07/02/2011'),
dayMilliseconds = 1000 * 60 * 60 * 24;
var weekendDays = 0;
while (start <= finish) {
var day = start.getDay()
if (day == 0 || day == 6) {
weekendDays++;
}
start = new Date(+start + dayMilliseconds);
}
答案 3 :(得分:0)
蛮力:http://jsfiddle.net/mplungjan/vwNfU/
<script>
var aDay = 24*60*60*1000;
function getWeekend(dString1,dString2) {
var d1 = new Date(Date.parse(dString1)); //"MM/DD/YYYY"
var d2 = new Date(Date.parse(dString2));
var weekend = {
Sat:0,
Sun:0
}
for (var d,i=d1.getTime(), n=d2.getTime();i<=n;i+=aDay) {
d=new Date(i).getDay();
document.write("<br>"+new Date(i)+":"+d);
if (d===6) weekend.Sat++;
if (d===0) weekend.Sun++;
}
return weekend;
}
var satsun = getWeekend("06/02/2011","07/02/2011")
document.write("<br>Sat:"+satsun.Sat+"\nSun:"+satsun.Sun)
</script>
答案 4 :(得分:0)
我会猜测并说OP可能意味着2011年7月2日到2011年8月2日之间的间隔,在这种情况下确实是10个周末,正是这些:02:06,03:06,09: 06,10:06,16:06,17:06,23:06,24:06,30:06,31:06。
计算这个的方法,没有循环:
function weekendsBetween(start, end) {
"use strict";
var startDay = start.getDay(),
diff = (end.getTime() - start.getTime() - startDay) / (60000 * 60 * 24),
diffWeaks = (diff / 7) | 0,
remWeaks = Math.ceil(diff % 7), extra = 0;
if (startDay + remWeaks > 7) extra = 2;
else if (startDay + remWeaks == 7 ||
remWeaks > startDay) extra = 1;
return diffWeaks * 2 + extra;
}
var date1 = new Date(2011, 6, 2);
var date2 = new Date(2011, 7, 2);
weekendsBetween(date1, date2);
请注意,如果您在服务器设置中使用此函数(例如Node.js),此函数可能无法按预期运行,因为如果您未指定UTC时区,它可能会转换为您当地时间并且会在一天之内下车,这可能会导致错误的结果。