Files
PiliPlus/lib/utils/duration_utils.dart
My-Responsitories bca5b0419c tweaks (#1738)
* feat: edit dm filter

* opt: browser

* feat: sb userInfo

* mod: tvPlayUrl
2025-11-13 09:36:50 +08:00

56 lines
1.7 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'dart:math' show pow;
abstract final class DurationUtils {
static String formatDuration(num? seconds) {
if (seconds == null || seconds == 0) {
return '00:00';
}
int h = seconds ~/ 3600;
seconds %= 3600;
int m = seconds ~/ 60;
seconds %= 60;
String sms = seconds is double
? seconds.toStringAsFixed(3).padLeft(6, '0')
: seconds.toString().padLeft(2, '0');
return h == 0
? "${m.toString().padLeft(2, '0')}:$sms"
: "${h.toString().padLeft(2, '0')}:${m.toString().padLeft(2, '0')}:$sms";
}
static final _splitRegex = RegExp(r'[:]');
static int parseDuration(String? data) {
if (data == null || data.isEmpty) {
return 0;
}
List<int> split = data.split(_splitRegex).reversed.map(int.parse).toList();
int duration = 0;
for (int i = 0; i < split.length; i++) {
duration += split[i] * pow(60, i).toInt();
}
return duration;
}
static String formatDurationBetween(int startMillis, int endMillis) =>
formatTimeDuration(Duration(milliseconds: endMillis - startMillis));
static String formatTimeDuration(Duration duration) {
final inDays = duration.inDays;
final daysLeft = inDays % 365;
final years = inDays ~/ 365;
final months = daysLeft ~/ 30;
final days = daysLeft % 30;
final hours = duration.inHours % 24;
final minutes = duration.inMinutes % 60;
final format = StringBuffer();
if (years > 0) format.write('$years年');
if (months > 0) format.write('$months月');
if (days > 0) format.write('$days天');
if (hours > 0) format.write('$hours小时');
if (minutes > 0) format.write('$minutes分钟');
return format.toString();
}
}