• 获取任意时间段内周、季度、半年的二级联动


    #需求是获取两个时间内 年周 、年季度、年半年的二级联动#
    找了半天也找不到什么有用的信息 就自己简单写了一个 思路是先获取年的列表再去嵌套查询

    根据前端VUE提供的格式嵌套

    1. public function getDate(){
    2. $leixing = Request::param('leixing');
    3. $larr = array('1','2','3','4');
    4. if(empty($leixing)){
    5. echo apireturn(201,'类型不正确','');die;
    6. }else{
    7. if(!in_array($leixing,$larr)){
    8. echo apireturn(201,'类型不正确','');die;
    9. }
    10. }
    11. $start = '2023-01-01';
    12. $start_time = strtotime($start);
    13. $end_time = time();
    14. $start_year = date('Y',$start_time);
    15. $end_year = date('Y',$end_time);
    16. $year_arr = array();
    17. if($start_year == $end_year){
    18. array_push($year_arr,$start_year);
    19. }else{
    20. //获取年份
    21. for($i=$end_year;$i>=$start_year;$i--){
    22. array_push($year_arr,(string)$i);
    23. }
    24. }
    25. $array = array();
    26. foreach ($year_arr as $k => $v){
    27. if($leixing == 1){
    28. $week_arr = array();
    29. //取周数
    30. if($end_year == $v){
    31. $endzhounum = date('W',time()+86400);
    32. if($start_year == $v){
    33. $startzhounum = intval(date('W',$start_time+86400));
    34. }else{
    35. $startzhounum = 1;
    36. }
    37. //获取周数
    38. for($i=$endzhounum;$i>=$startzhounum;$i--){
    39. array_push($week_arr,'第'.$i.'周');
    40. }
    41. }else{
    42. $year = $v."-01-01";
    43. $time = strtotime($year);
    44. $yearLastDay = strtotime("-1 day", strtotime("+1 year", $time));
    45. $endzhounum = date('W',$yearLastDay);
    46. if($start_year == $v){
    47. $startzhounum = date('W',$start_time+86400);
    48. }else{
    49. $startzhounum = 1;
    50. }
    51. //获取周数
    52. for($i=$endzhounum;$i>=$startzhounum;$i--){
    53. array_push($week_arr,'第'.$i.'周');
    54. }
    55. }
    56. $array[$v.'年'] = $week_arr;
    57. }else if($leixing == 2){
    58. $quarter_arr = array();
    59. //取周数
    60. if($end_year == $v){
    61. $endjinum = ceil(date('n',time()+86400)/3);
    62. if($start_year == $v){
    63. $startjinum = ceil(date('n',$start_time+86400)/3);
    64. }else{
    65. $startjinum = 1;
    66. }
    67. //获取周数
    68. for($i=$endjinum;$i>=$startjinum;$i--){
    69. array_push($quarter_arr,'第'.$i.'季度');
    70. }
    71. }else{
    72. $year = $v."-01-01";
    73. $time = strtotime($year);
    74. $yearLastDay = strtotime("-1 day", strtotime("+1 year", $time));
    75. $endjinum = ceil(date('n',$yearLastDay)/3);
    76. if($start_year == $v){
    77. $startjinum = ceil(date('n',$start_time+86400)/3);
    78. }else{
    79. $startjinum = 1;
    80. }
    81. //获取周数
    82. for($i=$endjinum;$i>=$startjinum;$i--){
    83. array_push($quarter_arr,'第'.$i.'季度');
    84. }
    85. }
    86. $array[$v.'年'] = $quarter_arr;
    87. }else if($leixing == 3){
    88. $banyear_arr = array();
    89. //取周数
    90. if($end_year == $v){
    91. $endjinum = ceil(date('n',time()+86400)/6);
    92. if($start_year == $v){
    93. $startjinum = ceil(date('n',$start_time+86400)/6);
    94. }else{
    95. $startjinum = 1;
    96. }
    97. //获取周数
    98. for($i=$endjinum;$i>=$startjinum;$i--){
    99. if($i == 1){
    100. array_push($banyear_arr,'上半年');
    101. }else{
    102. array_push($banyear_arr,'下半年');
    103. }
    104. }
    105. }else{
    106. $year = $v."-01-01";
    107. $time = strtotime($year);
    108. $yearLastDay = strtotime("-1 day", strtotime("+1 year", $time));
    109. $endjinum = ceil(date('n',$yearLastDay)/6);
    110. if($start_year == $v){
    111. $startjinum = ceil(date('n',$start_time+86400)/6);
    112. }else{
    113. $startjinum = 1;
    114. }
    115. //获取周数
    116. for($i=$endjinum;$i>=$startjinum;$i--){
    117. if($i == 1){
    118. array_push($banyear_arr,'上半年');
    119. }else{
    120. array_push($banyear_arr,'下半年');
    121. }
    122. }
    123. }
    124. $array[$v.'年'] = $banyear_arr;
    125. }else if($leixing == 4){
    126. $array = $year_arr;
    127. }
    128. }
    129. echo apireturn(200,'success',$array);die;
    130. }

    leixing的值为1 查询年-周、2为年-季度、3年-半年、4年

    运行结果如下(年-季度)

    1. {
    2. "status": 200,
    3. "msg": "success",
    4. "data": {
    5. "2023年": [
    6. "第4季度",
    7. "第3季度",
    8. "第2季度",
    9. "第1季度"
    10. ]
    11. }
    12. }

    #开始时间目前是写死的 可以根据自己需求修改#

  • 相关阅读:
    跨平台密码管理器KeePassX停止开发,你用过吗?
    Git 常用设置|别名、邮箱、免密
    RabbitMQ第一话 -- docker安装RabbitMQ以及Springboot集成RabbitMQ
    HTTP vs RPC:理解两种通信协议的区别
    软考中级网络工程师全面学习笔记第2版(5万字)+配套视频及课件
    分布式搜索引擎01
    一份简便的PyTorch教程,从不用自己配置环境开始。
    mysql kudu impala中 多层分组 先统计用户数量 再区间统计和的数量
    如何检验下载的大模型checkpoint文件是否正确的解决方案
    服务端修改Cookie——跨域cookie发送机——通信加密——异或加密
  • 原文地址:https://blog.csdn.net/qq_30986969/article/details/134310643