我需要一个功能,给我一个日期,给定一个日期和一天。我的一周总是从星期六开始,到星期五结束。我需要知道这个星期的每一天的日期,考虑到这个星期的任何日期。
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;
}
}
}有什么想法吗?
发布于 2016-04-10 18:24:26
您可以尝试下面提到的代码。在这里,它将从您的输入日期打印整个星期的所有7个日期。
$date = "2016-04-05";
$week = date("w",strtotime($date));
if ($week == 6) {
$saturday = $date;
} else {
$saturday = date("Y-m-d",strtotime($date." last Saturday"));
}
$friday = date("Y-m-d", strtotime($saturday." +6 days"));
$start = strtotime($saturday);
$end = strtotime($friday);
while ($start <= $end){
echo date("Y-m-d", $start);
echo "<br/>";
$start += 86400;
}发布于 2016-04-10 18:31:49
我希望这是可行的:
$fromDate="2016/04/15";
$resultDay="Thursday";
$fromDateStamp=strtotime($fromDate);
$fromDateStampToSunday=date("w",strtotime($fromDate))*86400;
$sundayStamp=$fromDateStamp-$fromDateStampToSunday;//first get to sunday, and add the result day to the sunday timestamp
$resultDayStamp=date("w",strtotime($resultDay))*86400 + $sundayStamp;
echo date("Y/n/j",$resultDayStamp);发布于 2016-04-10 18:46:09
以下是一个可能的解决方案:
<?php
echo getDateFromDay( "2016/04/11", "Tue" );
function getDateFromDay( $baseDate, $day )
{
$timeStamp = strtotime( $baseDate );
$offsetDay = date( "w", strtotime( $day ) ) - date( "w", $timeStamp );
if ( $offsetDay < 0 ) {
$offsetDay += 7;
}
return date( "Y-m-d", strtotime( "+{$offsetDay} day", $timeStamp ) );
}
?>https://stackoverflow.com/questions/36533500
复制相似问题