Flutter/Dart:如何判断旧时间相对当前时间显示为「昨天」
Flutter/Dart 时间对比逻辑实现
核心判断条件
要实现需求中的「昨天」提示,需同时满足以下所有条件:
- 旧时间的日期是当前日期的前一天(仅比较年、月、日,忽略时分秒)
- 旧时间的小时为
23或4 - 当前时间的小时为
0或1
实现代码
String getTimeHint(DateTime oldTime) { final now = DateTime.now(); // 获取当前日期的前一天(重置时分秒为0,仅保留日期部分) final yesterday = DateTime(now.year, now.month, now.day).subtract(const Duration(days: 1)); // 判断旧时间的日期是否是昨天 final isOldTimeYesterday = oldTime.year == yesterday.year && oldTime.month == yesterday.month && oldTime.day == yesterday.day; // 检查旧时间小时和当前小时是否符合要求 final validOldHours = [4, 23]; final validCurrentHours = [0, 1]; if (isOldTimeYesterday && validOldHours.contains(oldTime.hour) && validCurrentHours.contains(now.hour)) { return '昨天'; } // 其他场景可返回自定义提示,比如格式化后的时间,这里按需调整 return oldTime.toString(); }
测试验证
以下场景会返回「昨天」:
- 旧时间:
2024-05-20 23:00:00,当前时间:2024-05-21 00:30:00 - 旧时间:
2024-05-20 04:15:00,当前时间:2024-05-21 01:00:00
以下场景不会返回「昨天」:
- 旧时间:
2024-05-20 22:00:00,当前时间:2024-05-21 00:30:00(旧时间小时不符合) - 旧时间:
2024-05-20 23:00:00,当前时间:2024-05-21 02:00:00(当前小时不符合) - 旧时间:
2024-05-19 23:00:00,当前时间:2024-05-21 00:30:00(旧时间日期不是前一天)
内容的提问来源于stack exchange,提问作者Zia Ullah
相关产品推荐
相关产品推荐

