这个问题,还真是不大不小。挺费脑筋。想了半天才想出来。
看看我这个方法:
假设我们要求 $year 年 的 第 $week 个周的起止时间。
代码:
----------------------------------------------------------------
<?php
$year="2004";
$week="3"; //假设要求2004年第三个周的起止时间
$a= mktime(0,0,0,"1","1",$year);//取得该年份第一天的unix时间戳
$aa=getdate($a);
$sh=$aa["wday"]; //看看这一天是星期几
if($sh==0){ //如果1月1日是星期天
$kaishi=$a+24*60*60*(($week-1)*7-6);
}else{
$kaishi=$a+24*60*60*(($week-1)*7-($sh-1));
}
$jieshu=$kaishi+6*24*60*60; //开始时间加6天就是结束时间
$ok1=getdate($kaishi); //将unix时间戳格式化成时间,并输出
$ok2=getdate($jieshu);
echo $year."年的第".$week."个周从".$ok1["year"]."-".$ok1["mon"]."-".$ok1["mday"]."开始到".$ok2["year"]."-".$ok2["mon"]."-".$ok2["mday"]."结束";
?>
---------------------------------------------------------------
输出结果为:
2004年的第3个周从2004-1-12开始到2004-1-18结束
你查一下机器日历,结果是正确的。
我这个方法有一个特点,就是,如果某年的第一个星期并不是这一年的第一天,比如2004年1月1日是星期三,那么 2004年的第2个周,那么1月6日那个星期一,我把它作为本年的第2个周。 也就是不满一个周,按一个周算得。
如果你不希望这样,可以稍微做一下修改,把判断的地方改成这样:
if($sh==0){
$kaishi=$a+24*60*60*(($week-1)*7+1);
}else{
if($sh==1){
$kaishi=$a+24*60*60*(($week-1)*7)
else{
$kaishi=$a+24*60*60*(($week-1)*7+(7-$sh+1));
}
}
这样就行了。 |
|