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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:24:02