floor(22/6)肯定不对了,一个星期是7天,你用6来除怎么行呢?floor((22-5)/7)+1
22 为待计算的天数
5 起始日期为星期一,加5天为星期六。计算有几个星期六当然要从星期六算起较好,所以从总天数中扣除5
7 一星期的天数
1 计算中没有计入开始的星期六,所以还要加1通式
floor((总天数-(待计算的星期几-起始日期的星期几))/7)+1
22 为待计算的天数
5 起始日期为星期一,加5天为星期六。计算有几个星期六当然要从星期六算起较好,所以从总天数中扣除5
7 一星期的天数
1 计算中没有计入开始的星期六,所以还要加1通式
floor((总天数-(待计算的星期几-起始日期的星期几))/7)+1
试过你给的 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."天" ;
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."天" ;
{
if (date('w', $date) == 0) $x++;
if (date('w', $date) == 6) $y++;
$date += 24 * 3600;
}print "x=$x y=$y";?>
如果要用算法,不用循环的话。那最好是以周期来算,即7天。以周期来算那最好是当第一天就是星期六最简单,而且你给的参数也很容易就可以算出星期六到星期一是多少天。(如果是从星期三算有几个星期二,那就7-(3-2)就可以了。先把总天数扣除掉这些天数(因为这些天数肯定不会是小于一个周期),剩下的再除周期数得到其最大整数就是包含个数了。只是解释一下唠叨的算法。没有其他创新方法了。用循环的话天数多就明显没有算法的优势了。
这个公式不对的,举个例子:比如今天星期一,明天星期二,共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 个礼拜六
<?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分该怎给呢?