如何在Flutter中像Youtube一样显示时间
How to display time ago like Youtube in Flutter
我正在编写一个 flutter 应用程序以使用 Youtube API V3.
克隆一些 Youtube 功能
该应用从 youtube 视频 API
中获取 视频时间戳作为字符串
每个时间戳的格式如下:
YYYY-MM-DDTHH:MM:SSZ
一个例子是:
2020-07-12T20:42:19Z
我想用文字显示:
- 1 小时
- 1 小时前
- 4 周前
- 11 个月前
- 1 年前
- ...
您可以使用 timeago 包
下面的示例代码
import 'package:timeago/timeago.dart' as timeago;
main() {
final fifteenAgo = new DateTime.now().subtract(new Duration(minutes: 15));
print(timeago.format(fifteenAgo)); // 15 minutes ago
print(timeago.format(fifteenAgo, locale: 'en_short')); // 15m
print(timeago.format(fifteenAgo, locale: 'es')); // hace 15 minutos
}
要将其与 YYYY-MM-DDTHH:MM:SSZ
时间格式一起使用,您可以将 String
转换为 DateTime
,然后对 DateTime
变量执行操作
DateTime time = DateTime.parse("2020-07-12T20:42:19Z");
print(timeago.format(time));
我在字符串上创建了一个扩展
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)
我正在编写一个 flutter 应用程序以使用 Youtube API V3.
克隆一些 Youtube 功能该应用从 youtube 视频 API
中获取 视频时间戳作为字符串每个时间戳的格式如下:
YYYY-MM-DDTHH:MM:SSZ
一个例子是:
2020-07-12T20:42:19Z
我想用文字显示:
- 1 小时
- 1 小时前
- 4 周前
- 11 个月前
- 1 年前
- ...
您可以使用 timeago 包
下面的示例代码
import 'package:timeago/timeago.dart' as timeago;
main() {
final fifteenAgo = new DateTime.now().subtract(new Duration(minutes: 15));
print(timeago.format(fifteenAgo)); // 15 minutes ago
print(timeago.format(fifteenAgo, locale: 'en_short')); // 15m
print(timeago.format(fifteenAgo, locale: 'es')); // hace 15 minutos
}
要将其与 YYYY-MM-DDTHH:MM:SSZ
时间格式一起使用,您可以将 String
转换为 DateTime
,然后对 DateTime
变量执行操作
DateTime time = DateTime.parse("2020-07-12T20:42:19Z");
print(timeago.format(time));
我在字符串上创建了一个扩展
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)