如何在java脚本中确定星期六和星期日之间的数字

How to determine number Saturdays and Sundays comes between two dates in java script

本文关键字:星期六 星期日 之间 数字 java 脚本      更新时间:2023-09-26

我有如下要求我有两次约会,我需要弄清楚周六和周日之间的时间。
日期:2011年6月2日
日期:2011年7月2日
10天为周末
谢谢Srini

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

编辑为计算周末天数,而不是周末数量。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)));

根据您的日期,它们不是美国格式的(至少如果它们之间有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。

冲击力: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>

我会胡乱猜测一下,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时区,它可能会被翻译成您的本地时间,并在某一天内停止,这可能会导致不正确的结果。