PHP实现指定月份累计天数计算的代码问题求助
解决累计月份天数计算问题
看起来你需要的是从四月开始到目标月份的累计总天数,而不是单月天数对吧?当前代码只是简单把0加上目标月份的天数,所以只能拿到单月数值。我来给你调整代码,实现累计计算的需求。
核心思路
因为你的月份是从Apr开始按顺序排列的,所以我们只需要按顺序遍历从Apr到目标月份的所有月份,把每个月的天数累加起来就行。
解决方案代码
方法一:遍历累加(直观易懂)
// 保持你原有的月份顺序和天数定义 $month_days = [ "Apr" => 30, "May" => 31, "Jun" => 30, "Jul" => 31, "Aug" => 31, "Sep" => 30, "Oct" => 31, "Nov" => 30, "Dec" => 31, "Jan" => 31, "Feb" => 28, "Mar" => 30 ]; $LatestValuesDate = 'May'; // 可以替换成'Jul'测试 $total_days = 0; // 按顺序遍历数组,累加天数直到目标月份 foreach ($month_days as $month => $days) { $total_days += $days; // 找到目标月份就停止循环,避免多算后面的月份 if ($month === $LatestValuesDate) { break; } } echo "累计天数:" . $total_days; // 输入'May'输出61,输入'Jul'输出91
方法二:数组切片求和(更简洁)
如果你喜欢更简洁的写法,可以用数组函数来实现:
$month_days = [ "Apr" => 30, "May" => 31, "Jun" => 30, "Jul" => 31, "Aug" => 31, "Sep" => 30, "Oct" => 31, "Nov" => 30, "Dec" => 31, "Jan" => 31, "Feb" => 28, "Mar" => 30 ]; $LatestValuesDate = 'Jul'; // 获取所有月份的顺序数组 $month_order = array_keys($month_days); // 找到目标月份在数组中的位置 $target_pos = array_search($LatestValuesDate, $month_order); // 从开头切到目标月份(包含),然后求和 $total_days = array_sum(array_slice($month_days, 0, $target_pos + 1)); echo "累计天数:" . $total_days; // 输出91
额外优化:处理闰年二月
如果你的场景需要考虑闰年的二月天数(29天),可以加个判断逻辑:
$year = 2024; // 可以换成date('Y')获取当前年份 // 重写月份数组时动态处理二月 $month_days = [ "Apr" => 30, "May" => 31, "Jun" => 30, "Jul" => 31, "Aug" => 31, "Sep" => 30, "Oct" => 31, "Nov" => 30, "Dec" => 31, "Jan" => 31, "Feb" => ((($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0)) ? 29 : 28, "Mar" => 30 ];
内容的提问来源于stack exchange,提问作者user3386779
相关产品推荐
相关产品推荐

