floor(22/6)肯定不对了,一个星期是7天,你用6来除怎么行呢?floor((22-5)/7)+1
22 为待计算的天数
5 起始日期为星期一,加5天为星期六。计算有几个星期六当然要从星期六算起较好,所以从总天数中扣除5
7 一星期的天数
1 计算中没有计入开始的星期六,所以还要加1通式
floor((总天数-(待计算的星期几-起始日期的星期几))/7)+1

解决方案 »

  1.   

    xuzuning(唠叨) 兄:
    试过你给的 floor((总天数-(待计算的星期几-起始日期的星期几))/7)+1 
    但是我好像无法理解,不知道是不是我理解上有问题,另外底下我写了
    一段求出星期六跟星期日共有几天的语法,不知道这样对不对!!
    $X=1 ;//起始值(星期一)
    for ($i = 1; $i <= 22; $i++) //共22天
    {
    if ($X==0 OR $X==6) {$D=$D+1;} //0=星期日;6=星期六
    $X=$X+1;                    //为了往下计算故加一
    if($X==7){$X=0;}               //$X遇7时便将值改为0
    }
    echo "六日共有".$D."天" ;
      

  2.   

    有没有比这个写法更优秀的呢?$X=1 ;//起始值(2005/10/03 星期一)
    for ($i = 1; $i <= 22; $i++) //~2005/10/24 共22天
    {
    if ($X==0 OR $X==6) {$D=$D+1;} //0=星期日;6=星期六
    $X=$X+1;                       //为了往下计算故加一
    if($X==7){$X=0;}               //$X遇7时便将值改为0
    }
    echo "六、日共有".$D."天" ;
      

  3.   

    <?php$date = strtotime("2005/10/03");while ($date < strtotime("2005/10/24"))
    {
         if (date('w', $date) == 0) $x++;
         if (date('w', $date) == 6) $y++;
         $date += 24 * 3600;
    }print "x=$x y=$y";?>
      

  4.   

    唠叨的算法很明显,不过用CEIL就可以了,为什么要用FLOOR?
    如果要用算法,不用循环的话。那最好是以周期来算,即7天。以周期来算那最好是当第一天就是星期六最简单,而且你给的参数也很容易就可以算出星期六到星期一是多少天。(如果是从星期三算有几个星期二,那就7-(3-2)就可以了。先把总天数扣除掉这些天数(因为这些天数肯定不会是小于一个周期),剩下的再除周期数得到其最大整数就是包含个数了。只是解释一下唠叨的算法。没有其他创新方法了。用循环的话天数多就明显没有算法的优势了。
      

  5.   

    floor((总天数-(待计算的星期几-起始日期的星期几))/7)+1
    这个公式不对的,举个例子:比如今天星期一,明天星期二,共2天,
    floor(( 2 - (2-1))/7) + 1 = 1?
    ceil(( 2 - (2-1))/7) = 1?
    你说星期一到星期二有一个星期六还是一个星期日?正确的公式应该是: 
    =总天数/7 (if 总天数 % 7 == 0 || 总天数 % 7 + 起始日期星期几 < 6 )
    =总天数/7 + 1 (if 总天数 % 7 + 起始日期星期几 >= 6)因为 22 % 7 + 1 < 6 所以 有 22/7 = 3 个礼拜六
      

  6.   

    我觉得目前看来   Meteorlet(www.dictworld.com)  提出的方式应该比较符合
    <?php$date = strtotime("2005/10/03");while ($date < strtotime("2005/10/24"))
    {
         if (date('w', $date) == 0) $x++;
         if (date('w', $date) == 6) $y++;
         $date += 24 * 3600;
    }print "x=$x y=$y";?>
    但是 xuzuning(唠叨) 兄:的提的观念又好像不错
    小弟这50分该怎给呢?