I need a function that gives me a date, given a date and a day. My week starts always on a Saturday and ends on a Friday. I need to know the date of each of the days of this week, given any date in this week.
getdatefromday($date,$day);
For example :
$date = "2016/04/10";
$day = "Thu";
getdatefromday($date,$day);
//Result is 2016-04-14
I have solved this problem already using the code bellow, but I am sure this can be solved in lot less lines, I just can't figure it out.
This is my solution to this problem :
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;
}
}
}
Any ideas?
You can try the below mentioned code. Here, it will print all 7 dates of the entire week from your input date.
$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;
}
I hope this works:
$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);
Here is one possible solution:
<?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 ) );
}
?>
Try this function:
function getDateFromDay($date, $day) {
$day = new DateTime($day);
$day_w = $day->format('w');
if ($day_w == 6) $day_w = -1;
$date = new DateTime($date);
$date_w = $date->format('w');
if ($date_w == 6) $date_w = -1;
$d = $day_w - $date_w;
$date->modify("$d days");
return $date->format('Y-m-d');
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.