本帖最后由 wlxm007 于 2009-10-22 17:35:31 编辑

解决方案 »

  1.   

    我有一个简单的计算某天是星期几的算法
    c语言的,你改成php就行了。
    得到某一天是星期几,再算星期日和星期一就容易了。
    int DayOfWeek(int y, int m, int d) 

        static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; 
        y -= m < 3;        //m小于3时y减1
        return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; 
    }
      

  2.   

    楼上的方法不错,可惜php中已经有一个函数能直接计算出某天是星期几了
    echo date("N",strtotime("2009-10-01"));
      

  3.   

    $time = '2006-10-2 11:00:02';
    $time = strtotime( $time);
    $y = date('Y', $time);
    $w = date('W', $time);$year = strtotime("{$y}-1-1 00:00:00");
    echo date('Y-m-d H:i:s', $year+$w*7*24*60*60);
      

  4.   

    $time = '2009-10-22 11:00:02';
    $time = strtotime( $time);echo date("Y-m-d H:i:s", strtotime("this Monday", $time));
      

  5.   


    引用楼上的想法 在用控制流语句
    if(星期一)
    {
    echo “星期一是:”values,“星期日是:”values-6;
    }
      

  6.   

    function getWeekSe($date='')
    {
    if(!$date) $date = date('Y-m-d');
    $td = date('w',strtotime($date));
    if($td == 0)
    {
    $w[] = date('Y-m-d',strtotime($date.' -6 day'));
    $w[] = $date;
    }
    else 
    {
    $dd  = $td - 1;
    $fd  = 7 - $td;
    $w[] = date('Y-m-d',strtotime($date." -{$dd} day"));
    $w[] = date('Y-m-d',strtotime($date." +{$fd} day"));
    }
    return $w;
    }
    print_r(getWeekSe());
      

  7.   


    function a()
    {
    $d=getdate();
    $day=$d[mday];//得出今天是几号
    $week=$d[weekday];//得出今天是星期几
    switch($week)
    {
    case:"monday"
    echo "这周的星期一是".$d."星期日是".$d-6;
    break;
    case:"Tuesday"
    echo "这周的星期一是".$d-1."星期日是".$d-5;
    break;
    .....
    ....
    }
    }
    哈哈刚学PHP  下面:echo "这周的星期一是".$d-1。中的$d-1 不知道可不可以挖。思路是这样
      

  8.   


    <?php
    class a
    {
    function a()
    {
    $d=getdate();
    $day=$d[mday];//得出今天是几号$week=$d[weekday];//得出今天是星期几
    //echo $week;
    switch($week)
    {
    case"monday";
    $x=$day;
    $y=$day-6;
    echo "这周的星期一是".$x."星期日是".$y;
    break;
    case"Tuesday";
    $x=$day-1;
    $y=$day-5;
    echo"这周的星期一是".$x."星期日是".$y;
    break;
    case"Friday";
    $x=$day-2;
    $y=$day-4;
    echo"这周的星期一是".$x."星期日是".$y; 
    break;
    }
    }
    }
    $c=new a;
    ?>不好意思 刚才没测试
      

  9.   

    $date = '2009-10-10';echo 'Sunday :' , getWeekDate($date, 0) , PHP_EOL;
    echo 'Monday :' , getWeekDate($date, 1) , PHP_EOL;
    //...
    echo 'Saturday :' , getWeekDate($date, 6) , PHP_EOL;function getWeekDate($t, $offset = 0, $format = 'Y-m-d') {
    $t = strtotime($t);
    return date($format, $t - (date('w', $t) - $offset) * 86400);
    }
      

  10.   

    你的结果是2009-10-26,而我要的结果是2009-10-19和2009-10-25,不过你的方法对着呢,应该是$time = '2009-10-22';
    $time = strtotime( $time);
    echo date("Y-m-d", strtotime("last Monday", $time));
    echo date("Y-m-d", strtotime("this Sunday", $time));给5分吧
      

  11.   

    此方法经典啊,我再改进改进,呵呵function getWeekDate($t, $offset = 0, $format = 'Y-m-d') { 
    $t = strtotime($t); 
    echo date($format, $t - (date('w', $t) - $offset) * 86400); 
    }
    $date = '2009-10-10';
    echo '上周日:' , getWeekDate($date, 0) , PHP_EOL;
    echo '本周一 :' , getWeekDate($date, 1) , PHP_EOL;//... 
    echo '本周日 :' , getWeekDate($date, 7) , PHP_EOL; 余下的15分都给你了
      

  12.   

    帅哥 我今天写一个数据 和你问题问题有点像!
    IF OBJECT_ID('TEMPDB..#')IS NOT NULL DROP TABLE #
    GO
    SELECT MIN(date) AS week_min,MAX(date) AS week_max,[WEEK]INTO # FROM 
    (SELECT DATEADD(day,number,'2009-10-01') AS date,
           DATEPART(week,DATEADD(day,number,'2009-10-01')) AS week
    FROM master.dbo.spt_values
    WHERE type = 'p' AND number <=31 AND MONTH(DATEADD(day,number,'2009-10-01'))=10)T
    GROUP BY [WEEK]
    SELECT week_min,
           week_max,
           (select count(*) from # where [week]<=t.[week])[week]
    from # t
    /*
    week_min                week_max                week
    ----------------------- ----------------------- -----------
    2009-10-01 00:00:00.000 2009-10-04 00:00:00.000 1
    2009-10-05 00:00:00.000 2009-10-11 00:00:00.000 2
    2009-10-12 00:00:00.000 2009-10-18 00:00:00.000 3
    2009-10-19 00:00:00.000 2009-10-25 00:00:00.000 4
    2009-10-26 00:00:00.000 2009-10-31 00:00:00.000 5(5 個資料列受到影響)
    */