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
相关产品推荐
相关产品推荐

