function get_residue_day(int $start_time) { //当前号数 $now_day = (int)date('d'); //$now_day = 5; //旧套餐使用开始的号数 $old_day = (int)date('d',$start_time); //$old_day = 31; $now_month_day = (int)date('t'); //$now_month_day = 28; //获取当月天数 if ($now_day > $old_day) { $all_day = $now_month_day; $residue_day = $all_day - ($now_day - $old_day) + 1; }else{ // 开始是22号,当前是5号 $all_day = (int)date('t',strtotime('last month')); //$all_day = 31; // 如果上个月是31号,本月只有30号,那就最少30天收钱 // 反过来,上个月30号 本月31号 if ($all_day > $now_month_day) { $all_day = $now_month_day; } // 开始是31号,本月只有30,29,28天 if ($all_day < $old_day) { $old_day = $all_day; } // 例如 上个月总数是30 ,开始是28号,当前的5号, 30-(30-28+5) $residue_day = $all_day - ($all_day - $old_day + $now_day) + 1; } return [ 'all_day' => $all_day, 'residue_day' => $residue_day, ]; }