Flutter/Dart如何获取今日之前最近7个周六日期并解决重复输出问题
问题原因
- 现有代码重复输出主要由两个问题导致:
- 嵌套调用方法时每次仅固定减去6天,当传入日期本身是周六时,计算逻辑会返回同一个日期,导致重复
- 硬编码多个相似方法嵌套调用的实现逻辑冗余,计算步长不符合每周间隔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
相关产品推荐
相关产品推荐

