You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用循环替代硬编码获取上个月的五个周六日期?

用循环实现获取上个月的五个周六日期

嘿,这个需求用循环来实现确实比硬编码舒服多了!硬编码重复代码太多,维护起来也麻烦,循环的方式不仅简洁,还能自动适配不同月份的情况。

核心思路

先拿到上个月第一个周六的时间戳,然后每次给这个时间戳加上7天的秒数,循环5次就能得到连续的五个周六日期啦——毕竟每周六之间正好间隔7天,这个逻辑非常可靠。

完整代码示例

// 获取上个月第一个周六的时间戳
$firstSatTimestamp = strtotime("first saturday of last month");
$saturdayDates = [];

// 循环生成5个周六的日期
for ($i = 0; $i < 5; $i++) {
    // 计算当前循环对应的周六时间戳:第一个周六 + i*7天的秒数
    $currentSatTimestamp = $firstSatTimestamp + ($i * 7 * 24 * 60 * 60);
    // 格式化为你需要的dd-mm-yy格式
    $saturdayDates[] = date("d-m-y", $currentSatTimestamp);
}

// 输出结果(和示例格式一致,用逗号分隔)
echo implode(", ", $saturdayDates);

代码解释

  1. 获取起始时间戳:strtotime("first saturday of last month")是PHP自带的语义化时间解析,能精准定位到上个月的第一个周六,不用自己计算日期差,非常省心。
  2. 循环生成日期:循环5次,每次给起始时间戳加上7*24*60*60秒(也就是7天的秒数),这样每次得到的都是下一个周六的时间戳。
  3. 格式化输出:用date("d-m-y")把时间戳转成你需要的日-月-两位年格式,最后用implode把数组转成逗号分隔的字符串,和你的示例输出完全匹配。

额外小提示

如果遇到上个月只有4个周六的情况(比如2024年2月只有4个周六),这个代码会生成第五个周六(也就是当月的第一个周六)。如果需要严格只输出上个月的周六,可以在循环里加个判断,检查生成的日期是否属于上个月:

$lastMonth = date("m", strtotime("last month"));
for ($i = 0; $i < 5; $i++) {
    $currentSatTimestamp = $firstSatTimestamp + ($i * 7 * 24 * 60 * 60);
    if (date("m", $currentSatTimestamp) == $lastMonth) {
        $saturdayDates[] = date("d-m-y", $currentSatTimestamp);
    }
}

这样就只会收集属于上个月的周六啦~

内容的提问来源于stack exchange,提问作者Devendra Vastrakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:40:35