传入参数 年份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哪位高手帮解答一下,有没有完善一点的这类函数,指点指点,多谢了,在线等~~~~
我用的其中一个函数如下: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哪位高手帮解答一下,有没有完善一点的这类函数,指点指点,多谢了,在线等~~~~
显然他不可能是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 是不能接受错误的日期格式的
我的日期写错了 不是2014-13-30 是2014-12-30 我计算week的写法也是对的啊 echo date('W',strtotime('2014-12-30'))现在的问题是根据year和week倒推出week的起始日期不对
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 周关于周次的计算与以前完全不同了,(以前是以一年的第一个周日开始计算的)很怪异
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'));
}
我测试过的