首页 > php教程 > PHP源码 > 正文

根据给定的日期格式'YYYY-mm-dd',获取该日期所在周的起始日期

PHP中文网
发布: 2016-05-25 17:03:20
原创
1581人浏览过

php代码

讯飞智作-讯飞配音
讯飞智作-讯飞配音

讯飞智作是一款集AI配音、虚拟人视频生成、PPT生成视频、虚拟人定制等多功能的AI音视频生产平台。已广泛应用于媒体、教育、短视频等领域。

讯飞智作-讯飞配音 67
查看详情 讯飞智作-讯飞配音
/**
 * 获取一年中所有星期的起始日期
 * @param $year 格式 'YYYY'
 * 返回二维数组 下标 key1值对应一年中某一天所在周的实际年份  key2值对应一年中某一天所在的周数[一年中第几周] 
 * 返回false 日期格式错误
 */
function get_all_weeks($year){
    $week_arr = array();
    $year = intval(trim($year));
    $preg = "/^\d{4,}$/";
    if(!preg_match($preg, $year)){
        return false;
    }   
    $begin_day = $year . '-01-01';
    $end_day = $year . '-12-31';
    //一年第一个星期一
    if(date('w',strtotime($begin_day))!=1){
        $begin_day = date('Y-m-d',strtotime("next monday", strtotime($begin_day)));
    }
    //第一个星期一所在周数
    $begin_week_num = intval(date('W',strtotime($begin_day)));
    //一年最后一个星期天
    if(date('w',strtotime($end_day))!=0){
        $end_day = date('Y-m-d',strtotime("last sunday",strtotime($end_day)));
        //存在跨年的星期,跨年所在周星期一
        $end_day_next = date('Y-m-d',strtotime($end_day)+24*60*60);
        //跨年星期所属年份与所在周数
        $stride_year = date('o',strtotime($end_day_next));
        $stride_weeknum = intval(date('W',strtotime($end_day_next)));
    }
    //最后一个星期天所在周数
    $end_week_num = intval(date('W',strtotime($end_day)));
    //一年第一个周一为一年的第一周或者第二周
    if($begin_week_num!=1){
        $i=2;
    }else{
        $i=1;
    }
    $j = 0;
    for($i;$i<=$end_week_num;$i++){      
        $start_date = date("Y-m-d", strtotime("$begin_day $j week"));
        $end_day = date("Y-m-d", strtotime($start_date . '+6 day'));
        $week_arr[$year][$i] = array(
            $start_date,
            $end_day
        );
        $j++;
    }
    if($end_day_next){
        $week_arr[$stride_year][$stride_weeknum] = array(
            $end_day_next,
            date("Y-m-d", strtotime($end_day_next . '+6 day'))
        );
    }
    return $week_arr;
}
//demo_调用
/*
$year = '2013';
if(get_all_weeks($year)){
    var_dump(get_all_weeks($year));
}else{
    echo '日期格式出错';
}
*/
/**
 * 获取某一天所在周的起始日期
 * 依赖 function get_all_weeks
 * @param $day 格式:'YYYY-mm-dd'
 * 返回false 日期格式错误
 * 正确,返回json "{"begin_day":"YYYY-mm-dd","end_day":"YYYY-mm-dd"}"
 */
function get_day_week($day){
    $date_arr = explode('-', trim($day));
    if(!checkdate(intval($date_arr[1]), intval($date_arr[2]), intval($date_arr[0]))){
        return false;
    }
    $year = date('Y',strtotime($day));
    $weeks = get_all_weeks($year);
    //某一天所属的年份与周数
    $real_year = date('o',strtotime($day));
    $week_num = intval(date('W',strtotime($day)));
    if(!empty($weeks[$real_year][$week_num][0]))
        $begin_day = $weeks[$real_year][$week_num][0];
    if(!empty($weeks[$real_year][$week_num][1]))
        $end_day = $weeks[$real_year][$week_num][1];
    //跨年周数值存储于上一年中
    if(empty($begin_day)||empty($end_day)){
        $year = date('Y',strtotime($day))-1;
        $weeks = get_all_weeks($year);
        $real_year = date('o',strtotime($day));
        $week_num = intval(date('W',strtotime($day)));
        if(!empty($weeks[$real_year][$week_num][0]))
            $begin_day = $weeks[$real_year][$week_num][0];
        if(!empty($weeks[$real_year][$week_num][1]))
            $end_day = $weeks[$real_year][$week_num][1];        
    }
    $the_day = array(
        'begin_day' => $begin_day,
        'end_day' => $end_day
    );
    $the_day = json_encode($the_day);
    return $the_day;
}
//demo_调用
/*
$day = '2014-01-01';
if(get_day_week($day)){
    var_dump(get_day_week($day));
}else{
    echo '日期格式出错';
}
*/
登录后复制
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号