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

Flutter中如何仅按日期比较DateTime对象?

如何在Flutter中仅比较DateTime的年、月、日部分?

方法1:生成仅含年月日的DateTime对象后直接比较

提取原DateTime的年、月、日字段,创建一个时间部分为0的新DateTime对象,之后就可以直接用==、isBefore、isAfter等原生方法进行比较:

DateTime dt1 = DateTime.parse("2023-11-10 11:47:00");
DateTime dt2 = DateTime.parse("2023-11-10 10:09:00");

// 生成仅保留年月日的DateTime
DateTime dateOnly1 = DateTime(dt1.year, dt1.month, dt1.day);
DateTime dateOnly2 = DateTime(dt2.year, dt2.month, dt2.day);

// 判断是否为同一天
bool isSameDate = dateOnly1 == dateOnly2; // 返回true
// 判断日期先后
bool isDt1Before = dateOnly1.isBefore(dateOnly2); // 返回false
bool isDt1After = dateOnly1.isAfter(dateOnly2); // 返回false

方法2:直接对比年、月、日字段(无需创建新对象)

如果只是需要判断两个日期是否相等,直接对比三个核心字段更高效:

bool isSameDate = dt1.year == dt2.year && dt1.month == dt2.month && dt1.day == dt2.day;

如果需要判断先后顺序,也可以通过字段的层级对比实现:

bool isDt1Before = dt1.year < dt2.year 
    || (dt1.year == dt2.year && dt1.month < dt2.month)
    || (dt1.year == dt2.year && dt1.month == dt2.month && dt1.day < dt2.day);

进阶:封装扩展方法复用逻辑

如果项目中频繁需要这类日期比较,可以给DateTime封装扩展方法,简化调用:

extension DateTimeDateOnly on DateTime {
  // 获取仅含年月日的DateTime对象
  DateTime get dateOnly => DateTime(year, month, day);
  
  // 直接判断是否与另一个DateTime为同一天
  bool isSameDateAs(DateTime other) {
    return year == other.year && month == other.month && day == other.day;
  }
}

// 使用示例
bool isSame = dt1.isSameDateAs(dt2); // 返回true
bool isBefore = dt1.dateOnly.isBefore(dt2.dateOnly); // 返回false

内容的提问来源于stack exchange,提问作者Munsif Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:14:56