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

Flutter/Dart如何获取今日之前最近7个周六日期并解决重复输出问题

问题原因
  • 现有代码重复输出主要由两个问题导致:
    1. 嵌套调用方法时每次仅固定减去6天,当传入日期本身是周六时,计算逻辑会返回同一个日期,导致重复
    2. 硬编码多个相似方法嵌套调用的实现逻辑冗余,计算步长不符合每周间隔7天的规则
正确实现方案

核心思路:先找到距离当前日期最近、且小于当前日期的第一个周六,之后每次向前推移7天,连续取7次即可,不会出现重复问题。

import 'package:intl/intl.dart';

void main() {
  // 目标日期,替换为DateTime.now()即可取当前实时日期计算
  DateTime currentDate = DateTime.parse('20210922');
  DateFormat dateFormat = DateFormat('dd/MM/yyyy');
  List<String> last7Saturdays = [];

  // DateTime.weekday规则:周一为1,周六为6,周日为7
  int diffDays = currentDate.weekday >= 6 
      ? currentDate.weekday - 6 
      : currentDate.weekday + 1;
  DateTime recentSaturday = currentDate.subtract(Duration(days: diffDays));
  // 处理当前日期正好是周六的情况,保证返回日期小于今日
  if (recentSaturday.isAtSameMomentAs(currentDate)) {
    recentSaturday = recentSaturday.subtract(const Duration(days: 7));
  }

  // 循环获取7个周六
  for (int i = 0; i < 7; i++) {
    last7Saturdays.add(dateFormat.format(recentSaturday));
    recentSaturday = recentSaturday.subtract(const Duration(days: 7));
  }

  // 输出结果
  for (var saturday in last7Saturdays) {
    print(saturday);
  }
}

使用你示例中的2021年9月22日作为入数测试,输出结果如下,完全符合需求:

18/09/2021
11/09/2021
04/09/2021
28/08/2021
21/08/2021
14/08/2021
07/08/2021

内容的提问来源于stack exchange,提问作者Manish Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:02