dongyuyi5680 2016-04-10 18:06
浏览 35
已采纳

日期函数,用于确定给定日期和日期的最近日期

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?

  • 写回答

4条回答 默认 最新

  • dongxing1965 2016-04-11 07:21
    关注

    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');
    }
    

    <kbd>demo</kbd>

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)