【问题标题】:Converting DateTime to time ago in Dart/Flutter在 Dart/Flutter 中将 DateTime 转换为时间前
【发布时间】:2019-04-11 16:53:45
【问题描述】:

问题是如何将 Dart DateTime 格式化为一个字符串,说明经过的时间,类似于您在 Stack Overflow 上查看时间的方式。

有没有比这更好的方法

String timeAgo(DateTime d) {
 Duration diff = DateTime.now().difference(d);
 if (diff.inDays > 365)
  return "${(diff.inDays / 365).floor()} ${(diff.inDays / 365).floor() == 1 ? "year" : "years"} ago";
 if (diff.inDays > 30)
  return "${(diff.inDays / 30).floor()} ${(diff.inDays / 30).floor() == 1 ? "month" : "months"} ago";
 if (diff.inDays > 7)
  return "${(diff.inDays / 7).floor()} ${(diff.inDays / 7).floor() == 1 ? "week" : "weeks"} ago";
 if (diff.inDays > 0)
  return "${diff.inDays} ${diff.inDays == 1 ? "day" : "days"} ago";
 if (diff.inHours > 0)
  return "${diff.inHours} ${diff.inHours == 1 ? "hour" : "hours"} ago";
 if (diff.inMinutes > 0)
  return "${diff.inMinutes} ${diff.inMinutes == 1 ? "minute" : "minutes"} ago";
 return "just now";
}

谢谢你,希望它可以帮助别人

【问题讨论】:

  • 它的好解决方案

标签: flutter datetime dart timestamp


【解决方案1】:

我将timeago 用于确切目的,发现它非常有用。它还具有多种格式和不同的语言支持。

【讨论】:

    【解决方案2】:

    你也可以试试这个包,Jiffy

    您可以从现在开始获得相对时间

    // This returns time ago from now
    Jiffy().fromNow(); // a few seconds ago
    
    //You can also pass in a DateTime Object or a string or a list
    Jiffy(DateTime.now()).fromNow; // a few seconds ago
    //or
    Jiffy(DateTime(2018, 10, 25)).fromNow(); // a year ago
    Jiffy("2020-10-25").fromNow(); // in a year
    

    在 Jiffy 中操作也很简单

    var dateTime = Jiffy().add(hours: 3, months: 2);
    
    dateTime.fromNow(); // in 2 months
    

    您还可以从现在以外的指定时间获取相对时间

    Jiffy([2022, 10, 25]).from([2022, 1, 25]); // in 10 months
    

    【讨论】:

      【解决方案3】:

      你可以使用 Flutter 默认的 intl.dart 方法很容易地做到这一点

      导入import 'package:intl/intl.dart';包,获取日期和时间之前的时间

      那么让我们看看怎么做,首先创建一个TimeAgo

      import 'package:intl/intl.dart';
      
      class TimeAgo{
        static String timeAgoSinceDate(String dateString, {bool numericDates = true}) {
          DateTime notificationDate = DateFormat("dd-MM-yyyy h:mma").parse(dateString);
          final date2 = DateTime.now();
          final difference = date2.difference(notificationDate);
      
          if (difference.inDays > 8) {
            return dateString;
          } else if ((difference.inDays / 7).floor() >= 1) {
            return (numericDates) ? '1 week ago' : 'Last week';
          } else if (difference.inDays >= 2) {
            return '${difference.inDays} days ago';
          } else if (difference.inDays >= 1) {
            return (numericDates) ? '1 day ago' : 'Yesterday';
          } else if (difference.inHours >= 2) {
            return '${difference.inHours} hours ago';
          } else if (difference.inHours >= 1) {
            return (numericDates) ? '1 hour ago' : 'An hour ago';
          } else if (difference.inMinutes >= 2) {
            return '${difference.inMinutes} minutes ago';
          } else if (difference.inMinutes >= 1) {
            return (numericDates) ? '1 minute ago' : 'A minute ago';
          } else if (difference.inSeconds >= 3) {
            return '${difference.inSeconds} seconds ago';
          } else {
            return 'Just now';
          }
        }
      
      } 
      

      并以这种方式调用它并获得所需的输出

      TimeAgo.timeAgoSinceDate(item.created_date), // In this example, 09-10-2020 08:29AM date format is getting passed, but you can pass it in any format.
      

      【讨论】:

      • 我尝试运行您的示例: var inputFormat = DateFormat('dd-MM-yyyy h:mma'); var notificationDate = inputFormat.parse('09-10-2020 08:29AM');但运行 } else { return difference.toString(); }
      猜你喜欢
      • 2022-01-23
      • 2019-11-30
      • 2020-10-07
      • 2020-12-18
      • 2017-01-31
      • 2021-11-17
      • 1970-01-01
      • 2020-09-11
      • 2021-07-07
      相关资源
      最近更新 更多