日期函数确定给定日期和日期的最接近日期
Date function to determine closest date given the day and date
我需要一个能给我日期的函数,给定一个日期和一天。我的一周总是从周六开始,到周五结束。给定本周中的任何日期,我需要知道本周每一天的日期。
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;
}
}
}
有什么想法吗?
您可以试试下面提到的代码。在这里,它将打印从您输入的日期开始整周的所有 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;
}
我希望这有效:
$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);
这是一种可能的解决方案:
<?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 ) );
}
?>
试试这个功能:
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');
}
我需要一个能给我日期的函数,给定一个日期和一天。我的一周总是从周六开始,到周五结束。给定本周中的任何日期,我需要知道本周每一天的日期。
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;
}
}
}
有什么想法吗?
您可以试试下面提到的代码。在这里,它将打印从您输入的日期开始整周的所有 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;
}
我希望这有效:
$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);
这是一种可能的解决方案:
<?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 ) );
}
?>
试试这个功能:
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');
}