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

Flutter中如何计算两个格式化日期的时间差并以字符串形式展示

Flutter 双日期差值拼接展示实现

你现有代码存在冗余转换问题:ticketData里调用toDate()拿到的本身就是DateTime实例,不需要再转字符串后二次parse,既浪费性能还可能触发时区转换偏差。

核心逻辑

  • 先把创建日期、截止日期的DateTime对象提取出来,统一抹除时分秒精度,只保留年月日维度计算,避免当天不同时间点导致天数差计算不准
  • 用DateTime内置的difference()方法计算时间间隔,取inDays属性得到整数天数
  • 格式化日期后把差值文本拼接到截止日期字符串尾部即可

完整可运行代码

// 预处理日期
final createdDateTime = ticketData['date_created'].toDate();
final dueDateTime = ticketData['due_date'].toDate();
// 仅保留年月日维度,消除时分秒影响
final createdDay = DateTime(createdDateTime.year, createdDateTime.month, createdDateTime.day);
final dueDay = DateTime(dueDateTime.year, dueDateTime.month, dueDateTime.day);
// 计算天数差
final gapDays = dueDay.difference(createdDay).inDays;
// 格式化展示文本
final createdText = DateFormat('d MMM y').format(createdDateTime);
final dueText = "${DateFormat('d MMM y').format(dueDateTime)} ($gapDays Days)";

// UI组件部分
Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    Text(
      'Created: $createdText',
      style: primaryColor400Style.copyWith(fontSize: fontSize13),
    ),
    // 原代码的TextSpan需要包裹在Text.rich中才能正常渲染
    Text.rich(
      TextSpan(
        text: dueText,
        style: weight400Style.copyWith(fontSize: fontSize14, color: hintColor),
      ),
    )
  ],
)

补充说明

运行后输出效果和预期完全一致:

6 Jun 2022
14 Jun 2022 (8 Days)

如果需要适配单复数场景(间隔1天时显示1 Day),加个简单判断即可:
final gapText = gapDays == 1 ? "1 Day" : "$gapDays Days";
再把gapText拼到截止日期尾部就行。

内容的提问来源于stack exchange,提问作者Kim San

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:36:21