传入参数 年份year和周数week,希望能得到该周的起止日期
我用的其中一个函数如下:function getFirstDayOfWeek($year,$week)
{
$first_day = strtotime($year."-01-01");
$is_monday = date("w", $first_day) == 1;
$is_weekone = strftime("%V", $first_day) == 1;
if($is_weekone)
{
$week_one_start = $is_monday ? strtotime("last monday", $first_day) : $first_day;
}
else
{
$week_one_start = strtotime("next monday", $first_day);
}
return $year.'第'.$week.'周开始天:'.date('Y-m-d',$week_one_start+(3600*24*7*($week-1)));
}
用过很多函数之后都发现同一个问题:比如:2014-13-30
用内置的date函数得出的week是 01,即表示2014-13-30是2015的第1周
但是用上面的函数来获取2015的第1周的第一天却是2015-01-05哪位高手帮解答一下,有没有完善一点的这类函数,指点指点,多谢了,在线等~~~~

解决方案 »

  1.   

    2014-13-30 理应理解为 2015-01-30
    显然他不可能是2015年的第一周,都30号了嘛我不知道你如何用内置的date函数得出的week
    date函数不能识别字符串型的日期,需要用 strtotime 转换
    于是
    $t = '2014-13-30';
    echo date('Y-m-d 星期 w 第 W 周', strtotime($t));
    得到
    1970-01-01 星期 4 第 01 周
    没错
    是第一周,但你看看是那一年的由此可见 strtotime 是不能接受错误的日期格式的
      

  2.   


    我的日期写错了 不是2014-13-30  是2014-12-30  我计算week的写法也是对的啊  echo date('W',strtotime('2014-12-30'))现在的问题是根据year和week倒推出week的起始日期不对
      

  3.   

    很长时间没有做这类计算了,好像 php 在这方面改了许多。原来的函数可能没用了
    for($i=2000;$i<2020;$i++) {
      $t = "$i-1-1";
      echo date('Y-m-d 星期 w 第 W 周', strtotime($t)).'<br />';
    }2000-01-01 星期 6 第 52 周
    2001-01-01 星期 1 第 01 周
    2002-01-01 星期 2 第 01 周
    2003-01-01 星期 3 第 01 周
    2004-01-01 星期 4 第 01 周
    2005-01-01 星期 6 第 53 周
    2006-01-01 星期 0 第 52 周
    2007-01-01 星期 1 第 01 周
    2008-01-01 星期 2 第 01 周 2007-12-31 已经算做 2008 的第一周了
    2009-01-01 星期 4 第 01 周
    2010-01-01 星期 5 第 53 周
    2011-01-01 星期 6 第 52 周
    2012-01-01 星期 0 第 52 周
    2013-01-01 星期 2 第 01 周
    2014-01-01 星期 3 第 01 周
    2015-01-01 星期 4 第 01 周
    2016-01-01 星期 5 第 53 周
    2017-01-01 星期 0 第 52 周
    2018-01-01 星期 1 第 01 周
    2019-01-01 星期 2 第 01 周关于周次的计算与以前完全不同了,(以前是以一年的第一个周日开始计算的)很怪异
      

  4.   


    function getStartDate($year, $weeks) { $day = $year.'-01-01';
    $isMonday = date("N", $day);
    return ($isMonday == '1') ? date("Y-m-d", strtotime($day.'+'.($weeks*7).' days')) : date("Y-m-d", strtotime($day.'+'.($weeks*7).' days -1 week Monday'));
    }
    我测试过的