如何确定周六和周日的数字是在java脚本中的两个日期之间

时间:2011-06-02 05:46:15

标签: javascript

我的要求如下 我有两个约会,我需要找到星期六和星期日之间的星期日 日期1:02/06/2011
日期2:02/07/2011
10天是周末
谢谢 作者Srini

5 个答案:

答案 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);
}

jsFiddle

答案 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);
}

jsFiddle

答案 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时区,它可能会转换为您当地时间并且会在一天之内下车,这可能会导致错误的结果。