我正在尝试在PHP中构建一个函数,具体取决于日期将给我
本周(星期一)20/8/12至26/8/12
下周+ 1(星期一)27/8/12至02/9/12
在2012年9月9日至9月9日的第二周(周一至周日)
之后下周+3(星期日)
下周+4(星期日)
下周+ 5(星期一)
我尝试过使用以下内容,但有什么更清洁吗?
$week0_mon = date("Y-m-d", strtotime(date("Y").'W'.date('W')."1"));
$week0_sun = date("Y-m-d", strtotime(date("Y").'W'.date('W')."7"));
$week1_mon = date("Y-m-d", strtotime(date("Y-m-d", strtotime($week0_mon)) . " +1 week"));
$week1_sun = date("Y-m-d", strtotime(date("Y-m-d", strtotime($week0_sun)) . " +1 week"));
echo $week0_mon.' to '.$week0_sun.'<br />';
echo $week1_mon.' to '.$week1_sun.'<br />';
答案 0 :(得分:1)
也许这会回答你的问题,它会计算上一个星期一并从这里开始一次添加一周。只需修改for
$dOffsets = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
$prevMonday = mktime(0,0,0, date("m"), date("d")-array_search(date("l"),$dOffsets), date("Y"));
$oneWeek = 3600*24*7;$toSunday = 3600*24*6;
for ($i=0;$i<= 5;$i++)
{
echo "Week +",$i," (mon-sun) ",
date("d/m/Y",$prevMonday + $oneWeek*$i)," to ",
date("d/m/Y",$prevMonday + $oneWeek*$i + $toSunday),"<br>";
}
这给了我
Week +0 (mon-sun) 20/08/2012 to 26/08/2012
Week +1 (mon-sun) 27/08/2012 to 02/09/2012
Week +2 (mon-sun) 03/09/2012 to 09/09/2012
Week +3 (mon-sun) 10/09/2012 to 16/09/2012
Week +4 (mon-sun) 17/09/2012 to 23/09/2012
Week +5 (mon-sun) 24/09/2012 to 30/09/2012
答案 1 :(得分:0)
我调整了@ Wr1t3r的答案,给出了正确的日期范围,如下所示:
function plus_week($addWeek=0){
$last_monday_timestamp=strtotime('-'.(date('N')-1).' days');
if($addWeek!=0){
if($addWeek>0) $addWeek='+'.$addWeek;
$last_monday_timestamp=strtotime($addWeek.' week', $last_monday_timestamp);
}
$end_week_timestamp = strtotime ('+6 days', $last_monday_timestamp);
return date('d/m/y', $last_monday_timestamp).' to '.date('d/m/y', $end_week_timestamp);
}
日期('N')将给工作日数字mon-sun(1-7),所以如果我们从中减去1,我们知道回到上个星期一的天数。或者我们可以使用strtotime('last lastday')。 但是如果我们目前在星期一,这种方式可以确保我们不会回到上周一。
星期一= 1所以(1-1 = 0)-0天=今天
星期五= 5所以(5-1 = 4)-4天=星期一
SUNDAY = 7(如果我们使用'w'则不是0)所以(7-1 = 6)-6天=星期一(不是明天)
我也调整了这个来做负数周数。
答案 2 :(得分:-1)
function plus_week($addWeek){
$date = date("d.m.Y",time());
$newdate = strtotime ( '+'.$addWeek.' week' , strtotime ( $date ) ) ;
$newdate = date ( 'd/m/y' , $newdate );
return $newdate;
}
for($i = 1; $i < 7; $i++){
echo "Following week+".$i." ".plus_week($i)." to ".plus_week($i+1)."<br/>";
}
从这里你会得到这样的答案:
在2012年8月29日至2012年9月5日之后的一周+ 1月
下周+ 2 05/09/12至12/09/12
在第3周12月12日至2012年9月19日
之后下周+ 4 19/09/12至26/09/12
下周+ 5 26/09/12至2012年10月3日
下周+ 6 03/10/12至10/10/12