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

Flutter/Dart中Duration小时差判断失效问题:早于24小时的日期未按预期返回

问题出在时间差的正负上!

嘿,我一眼就发现你代码里的问题了——你计算时间差的顺序搞反了,导致判断条件永远不触发!

你看,publishtime是10天前的时间,比当前的now早。当你调用publishtime.difference(now)时,Dart返回的Duration是一个负数(因为前者在后者之前)。也就是说difference.inHours的结果是-240,而不是你预期的240。这时候difference.inHours > 24这个条件肯定不成立,代码自然就走到了返回小时差值的分支。

怎么修复?

有两种简单的办法,推荐第一种,语义更清晰:

方法1:调换时间差的计算顺序

改成用当前时间减去发布时间,这样得到的就是正数的时间差,完全符合我们“计算过去了多久”的逻辑:

Duration difference = now.difference(publishtime);

这样10天前的发布时间会得到240小时的差值,>24的条件就会触发,返回格式化后的日期。

方法2:判断绝对值(不推荐,但可行)

如果你不想调换顺序,也可以取时间差的绝对值来判断:

if (difference.inHours.abs() > 24) {
  // 返回格式化日期
}

不过第一种方法更直观,别人读代码的时候一眼就能明白你在算“从发布到现在过了多久”。

修正后的完整代码

String _getTime() {
  String time;
  DateTime now = DateTime.now();
  // 调换顺序,计算当前时间与发布时间的正向差值
  Duration difference = now.difference(publishtime);
  if (difference.inHours > 24) {
    var format = DateFormat("dd.MM.yyyy");
    time = format.format(publishtime);
  } else {
    // 现在差值是正数,不用再替换负号了
    time = "${difference.inHours} hours ago";
  }
  return time;
}

这样修改后,当发布时间超过24小时,就会返回dd.MM.yyyy格式的日期;如果在24小时内,就返回对应的小时数,完全符合你的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:27:39