我需要一个函数,给出日期,给定日期和日期。我的星期总是在星期六开始,星期五结束。鉴于本周的任何日期,我需要知道本周每天的日期。确定日期和日期的最近日期的日期函数
getdatefromday($date,$day);
例如:
$date = "2016/04/10";
$day = "Thu";
getdatefromday($date,$day);
//Result is 2016-04-14
我已经解决了已经使用的代码波纹管这个问题,但我相信这可以减少很多线路来解决,我只是不明白。
这是我解决这个问题:
function getdatefromday($date,$day) {
$curr_day = date("D", strtotime($date));
switch ($curr_day) {
case 'Sat':
switch ($day) {
case 'Sat':
return $date;
break;
case 'Sun':
return date('Y-m-d',(strtotime ('+1 day' , strtotime ($date))));
break;
case 'Mon':
return date('Y-m-d',(strtotime ('+2 day' , strtotime ($date))));
break;
case 'Tue':
return date('Y-m-d',(strtotime ('+3 day' , strtotime ($date))));
break;
case 'Wed':
return date('Y-m-d',(strtotime ('+4 day' , strtotime ($date))));
break;
case 'Thu':
return date('Y-m-d',(strtotime ('+5 day' , strtotime ($date))));
break;
case 'Fri':
return date('Y-m-d',(strtotime ('+6 day' , strtotime ($date))));
break;
}
case 'Sun':
switch ($day) {
case 'Sat':
return date('Y-m-d',(strtotime ('-1 day' , strtotime ($date))));
break;
case 'Sun':
return $date;
break;
case 'Mon':
return date('Y-m-d',(strtotime ('+1 day' , strtotime ($date))));
break;
case 'Tue':
return date('Y-m-d',(strtotime ('+2 day' , strtotime ($date))));
break;
case 'Wed':
return date('Y-m-d',(strtotime ('+3 day' , strtotime ($date))));
break;
case 'Thu':
return date('Y-m-d',(strtotime ('+4 day' , strtotime ($date))));
break;
case 'Fri':
return date('Y-m-d',(strtotime ('+5 day' , strtotime ($date))));
break;
}
break;
case 'Mon':
switch ($day) {
case 'Sat':
return date('Y-m-d',(strtotime ('-2 day' , strtotime ($date))));
break;
case 'Sun':
return date('Y-m-d',(strtotime ('-1 day' , strtotime ($date))));
break;
case 'Mon':
return $date;
break;
case 'Tue':
return date('Y-m-d',(strtotime ('+1 day' , strtotime ($date))));
break;
case 'Wed':
return date('Y-m-d',(strtotime ('+2 day' , strtotime ($date))));
break;
case 'Thu':
return date('Y-m-d',(strtotime ('+3 day' , strtotime ($date))));
break;
case 'Fri':
return date('Y-m-d',(strtotime ('+4 day' , strtotime ($date))));
break;
}
case 'Tue':
switch ($day) {
case 'Sat':
return date('Y-m-d',(strtotime ('-3 day' , strtotime ($date))));
break;
case 'Sun':
return date('Y-m-d',(strtotime ('-2 day' , strtotime ($date))));
break;
case 'Mon':
return date('Y-m-d',(strtotime ('-1 day' , strtotime ($date))));
break;
case 'Tue':
return $date;
break;
case 'Wed':
return date('Y-m-d',(strtotime ('+1 day' , strtotime ($date))));
break;
case 'Thu':
return date('Y-m-d',(strtotime ('+2 day' , strtotime ($date))));
break;
case 'Fri':
return date('Y-m-d',(strtotime ('+3 day' , strtotime ($date))));
break;
}
case 'Wed':
switch ($day) {
case 'Sat':
return date('Y-m-d',(strtotime ('-4 day' , strtotime ($date))));
break;
case 'Sun':
return date('Y-m-d',(strtotime ('-3 day' , strtotime ($date))));
break;
case 'Mon':
return date('Y-m-d',(strtotime ('-2 day' , strtotime ($date))));
break;
case 'Tue':
return date('Y-m-d',(strtotime ('-1 day' , strtotime ($date))));
break;
case 'Wed':
return $date;
break;
case 'Thu':
return date('Y-m-d',(strtotime ('+1 day' , strtotime ($date))));
break;
case 'Fri':
return date('Y-m-d',(strtotime ('+2 day' , strtotime ($date))));
break;
}
case 'Thu':
switch ($day) {
case 'Sat':
return date('Y-m-d',(strtotime ('-5 day' , strtotime ($date))));
break;
case 'Sun':
return date('Y-m-d',(strtotime ('-4 day' , strtotime ($date))));
break;
case 'Mon':
return date('Y-m-d',(strtotime ('-3 day' , strtotime ($date))));
break;
case 'Tue':
return date('Y-m-d',(strtotime ('-2 day' , strtotime ($date))));
break;
case 'Wed':
return date('Y-m-d',(strtotime ('-1 day' , strtotime ($date))));
break;
case 'Thu':
return $date;
break;
case 'Fri':
return date('Y-m-d',(strtotime ('+1 day' , strtotime ($date))));
break;
}
case 'Fri':
switch ($day) {
case 'Sat':
return date('Y-m-d',(strtotime ('-6 day' , strtotime ($date))));
break;
case 'Sun':
return date('Y-m-d',(strtotime ('-5 day' , strtotime ($date))));
break;
case 'Mon':
return date('Y-m-d',(strtotime ('-4 day' , strtotime ($date))));
break;
case 'Tue':
return date('Y-m-d',(strtotime ('-3 day' , strtotime ($date))));
break;
case 'Wed':
return date('Y-m-d',(strtotime ('-2 day' , strtotime ($date))));
break;
case 'Thu':
return date('Y-m-d',(strtotime ('-1 day' , strtotime ($date))));
break;
case 'Fri':
return $date;
break;
}
}
}
任何想法?
Downvoter:为什么? –
只是想补充一点,就是在星期六开始的那个星期六,我得到了星期六错误的结果。添加下面的代码在功能的开始使它正确:): if(date('D',strtotime($ date))=='Sat'){$ date = date('Y/m/d' ,(strtotime(' - 1 day',strtotime($ date)))); } –
@IoannisKokkinis:你能给我一个例子,说明这段代码不起作用吗?在我的[demo](https://eval.in/602975)中,它是有效的,如果你在星期六,你会得到相同的星期六...... –