如何在Flutter中像Youtube一样显示之前的时间

2024-03-03

我正在编写一个 flutter 应用程序来克隆一些 Youtube 功能Youtube API V3.

该应用程序获取字符串形式的视频时间戳来自 YouTube 视频 API

每个时间戳都具有以下格式:

YYYY-MM-DDTHH:MM:SSZ

一个例子是:

2020-07-12T20:42:19Z

我想以文本形式显示:

  • 1 hour
  • 1 小时前
  • 4 周前
  • 11 个月前
  • 1年以前
  • ...

我在 String 上创建了一个扩展

 extension StringExtension on String {
  static String displayTimeAgoFromTimestamp(String timestamp) {
    final year = int.parse(timestamp.substring(0, 4));
    final month = int.parse(timestamp.substring(5, 7));
    final day = int.parse(timestamp.substring(8, 10));
    final hour = int.parse(timestamp.substring(11, 13));
    final minute = int.parse(timestamp.substring(14, 16));

    final DateTime videoDate = DateTime(year, month, day, hour, minute);
    final int diffInHours = DateTime.now().difference(videoDate).inHours;

    String timeAgo = '';
    String timeUnit = '';
    int timeValue = 0;

    if (diffInHours < 1) {
      final diffInMinutes = DateTime.now().difference(videoDate).inMinutes;
      timeValue = diffInMinutes;
      timeUnit = 'minute';
    } else if (diffInHours < 24) {
      timeValue = diffInHours;
      timeUnit = 'hour';
    } else if (diffInHours >= 24 && diffInHours < 24 * 7) {
      timeValue = (diffInHours / 24).floor();
      timeUnit = 'day';
    } else if (diffInHours >= 24 * 7 && diffInHours < 24 * 30) {
      timeValue = (diffInHours / (24 * 7)).floor();
      timeUnit = 'week';
    } else if (diffInHours >= 24 * 30 && diffInHours < 24 * 12 * 30) {
      timeValue = (diffInHours / (24 * 30)).floor();
      timeUnit = 'month';
    } else {
      timeValue = (diffInHours / (24 * 365)).floor();
      timeUnit = 'year';
    }

    timeAgo = timeValue.toString() + ' ' + timeUnit;
    timeAgo += timeValue > 1 ? 's' : '';

    return timeAgo + ' ago';
  }
}

然后以文字方式调用:

StringExtension.displayTimeAgoFromTimestamp(video.timestamp)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Flutter中像Youtube一样显示之前的时间 的相关文章

随机推荐

  • .gitlab-ci.yml 错误:“apk:找不到命令”

    我有以下内容 gitlab ci yml file image docker services docker dind stages test build deploy test stage test before script apk a
  • 在这种情况下溢出意味着什么?

    我找到了一种以模数相乘的算法 下一个伪代码取自维基百科 页面模指数 部分从右到左的二进制方法 完整的伪代码是 function modular pow base exponent modulus Assert modulus 1 modul
  • Vuetify 没有 vue-cli sass/scss 冲突

    我需要将 vuetify 集成到一个无法使用 vue cli 且具有以下 css sass webpack 配置的项目中 test s ac ss use MiniCssExtractPlugin loader loader css loa
  • 在 C# if 语句中检查多个布尔条件的最佳方法

    我的代码 C 中有 3 个布尔值和一个int32取决于布尔值的属性true and false 除了 if 语句之外 以另一种方式实现此目的的最佳方法是什么 if a b c d 1 if a b c d 2 etc ect 编辑 这 3
  • 在 Spring Data JPA 中使用 Java 配置进行审计

    Java 配置是Spring Data 1 2 0 版本中引入 http blog springsource org 2012 10 15 spring data release train arrived 但我不知道java配置如何
  • Windows 上的“catalina.out”在哪里?

    我在 Linux 机器上有一个 tomcat 我可以可视化 catalina out 文件 我想将我的开发环境 Eclipse IDE JDK 6 Tomcat 6 等 从 Linux 迁移到 Windows 一切正常 但是 我在 Wind
  • 我可以使用 JavaScript 或 HTML 打开 IE 10 兼容性视图吗?

    如何在 Javascript 或 HTML 中以编程方式打开 IE 10 兼容性视图 我刚刚在其中添加了以下元标记标签 但它不起作用 有没有办法在 JS 中做同样的事情 我查了msdn上的兼容模式文章 here http msdn micr
  • Excel 中的动态数据验证(非 VBA!)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 I got n持有的类别m产品 该列表未排序 例如如下 现在这就是我基本上想用这个列表做的事情 下拉菜单 数据验证 动态存储第一列的每个唯一值的列表
  • Scala String 与 java.lang.String - 类型推断

    在 REPL 中 我定义了一个函数 请注意返回类型 scala gt def next i List String i map 0 i reverse map 1 next i List String List java lang Stri
  • 泛型:访问新成员,而不是隐藏成员

    我遇到了泛型和新成员的问题 我编写了一个对 ObjectA 类型的对象进行操作的泛型类 ObjectB 派生自ObjectA 并隐藏了ObjectA 的一些成员 当我提供 ObjectB 的类型作为泛型类的类型参数时 我希望当我调用 Obj
  • Javascript fetch 返回 200 但没有数据

    我需要在下拉菜单中显示世界上所有国家 地区 所以我找到了这个api端点端点链接 https restcountries eu rest v1 all 当我在网络浏览器中复制并粘贴此端点链接时 我收到了包含所有数据的响应 国家 当我尝试将其嵌
  • 如何在 Android 中使用应用程序范围的 id 打开 facebook Messenger 聊天窗口

    我可以在我的应用程序中使用 graph api 获取应用程序范围的用户 ID 然后 如何在 android 中使用应用程序范围的 id 打开 facebook Messenger 聊天窗口 我们可以使用 global facebook id
  • 如何获取 Expo 的 assetlinks.json 的 sha256_cert_fingerprints?

    android通用深度链接的说明需要您上传 well known assetlinks json以供验证 Expo 深度链接文档指示您按照官方 Android 文档格式化文件 但该文档假设您正在使用 android studio 来构建您的
  • github 自动将组添加到每个新存储库

    我的组织中存在一个问题 每当创建新存储库时 其中一个组就会自动添加到具有读取权限的该存储库中 即使具有组织所有者权限 也无法将其从那里删除 它指出这是由组织所有者管理的 但在该组或组织设置中都看不到这样的设置 有什么想法如何更改 删除 自动
  • Selenium 中 waitForPageToLoad 的替代方案

    我在页面上有一系列链接 需要不同的时间来加载 我想捕获每个链接所花费的时间 我遇到的问题是 如果超过 waitForPageToLoad 时间 则会导致测试失败 并且我的其余链接没有得到测试 我知道我可以跳过测试中的可疑链接或设置超出预期的
  • JPA 中列表的保存顺序

    我对JPA有以下疑问 我可以保存 java util List 中元素的顺序吗 在我的应用程序中 将元素放入列表中的顺序很重要 但是当我从数据库中获取这些集合后 顺序并不相同 如预期 你能告诉我一种解决这个问题的方法吗 附 我放入集合中的实
  • 计算 DISTINCT 值的出现次数

    我试图找到一个 MySQL 查询 该查询将在特定字段中查找不同的值 计算该值出现的次数 然后按计数对结果进行排序 示例数据库 id name 1 Mark 2 Mike 3 Paul 4 Mike 5 Mike 6 John 7 Mark
  • GAE - 部署错误:“AttributeError:无法设置属性”

    当我尝试部署我的应用程序时 出现以下错误 Starting update of app flyingbat123 version 0 1 Getting current resource limits Password for avigma
  • Prestashop 送货时选择隐藏/显示付款方式

    我试图弄清楚如何在选择送货方式时显示 隐藏付款方式 我尝试了几个解决方案 但它对我不起作用 其中之一是这个
  • 如何在Flutter中像Youtube一样显示之前的时间

    我正在编写一个 flutter 应用程序来克隆一些 Youtube 功能Youtube API V3 该应用程序获取字符串形式的视频时间戳来自 YouTube 视频 API 每个时间戳都具有以下格式 YYYY MM DDTHH MM SSZ