首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数来确定给定日期和日期的最近日期。

函数来确定给定日期和日期的最近日期。
EN

Stack Overflow用户
提问于 2016-04-10 18:06:11
回答 3查看 135关注 0票数 1

我需要一个功能,给我一个日期,给定一个日期和一天。我的一周总是从星期六开始,到星期五结束。我需要知道这个星期的每一天的日期,考虑到这个星期的任何日期。

代码语言:javascript
复制
getdatefromday($date,$day);

例如:

代码语言:javascript
复制
$date = "2016/04/10";
$day = "Thu";
getdatefromday($date,$day);
//Result is 2016-04-14 

我已经用下面的代码解决了这个问题,但是我确信这可以用更少的行来解决,我就是想不出。

这是我解决这个问题的办法:

代码语言:javascript
复制
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;                      
            }       
        }


}

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2016-04-10 18:24:26

您可以尝试下面提到的代码。在这里,它将从您的输入日期打印整个星期的所有7个日期。

代码语言:javascript
复制
$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;
}
票数 0
EN

Stack Overflow用户

发布于 2016-04-10 18:31:49

我希望这是可行的:

代码语言:javascript
复制
$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);
票数 0
EN

Stack Overflow用户

发布于 2016-04-10 18:46:09

以下是一个可能的解决方案:

代码语言:javascript
复制
<?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 ) );
}

?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36533500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档