Flutter/Dart 如何获取本周或下周指定星期几对应的DateTime日期
Flutter 获取指定下一个星期几对应日期的实现方案
核心逻辑
Dart 内置的 DateTime 类默认使用 ISO 标准,weekday 属性返回值规则为:周一=1、周二=2...周日=7。如果需要适配「周日为一周起始」的规则,只需对 weekday 做偏移转换后,计算当前日期和目标星期的间隔天数即可。
完整工具函数
/// 获取从周日作为一周起始的下一个目标星期对应的日期 /// [targetWeekday] 规则:周日=1,周一=2,周二=3...周六=7 DateTime getNextWeekday(DateTime currentDate, int targetWeekday) { // 把DateTime默认的weekday转成周日为1的格式 int adjustedCurrentWeekday = (currentDate.weekday % 7) + 1; // 计算间隔天数 int deltaDays = targetWeekday - adjustedCurrentWeekday; // 如果差值小于等于0,说明目标星期在下周,加7天偏移 if (deltaDays <= 0) { deltaDays += 7; } // 返回计算后的日期,add方法会自动处理跨月/跨年场景 return currentDate.add(Duration(days: deltaDays)); }
调用示例
可以直接用你给出的场景测试:
void main() { DateTime current = DateTime(2020, 9, 12); // 要获取常规定义的下一个周一,按规则传2 DateTime nextMonday = getNextWeekday(current, 2); print(nextMonday); // 输出 2020-09-14 00:00:00.000 // 如果你需要的结果为示例中的2020-09-13,把targetWeekday改成1即可 }
注:如果你对目标星期的编号规则有调整,只需修改
targetWeekday的传值映射即可,无需修改核心计算逻辑。
注意事项
- 直接使用
DateTime.add()方法会自动处理夏令时、跨月、跨年等边界场景,不需要额外做日期校验 - 如果需要获取「包括今天在内的最近一个目标星期」,只需把
deltaDays <=0的判断改成deltaDays <0即可
内容的提问来源于stack exchange,提问作者Amiden
相关产品推荐
相关产品推荐

