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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:36:34