chatapp3-flutter/lib/shared/tools/sc_date_utils.dart
2026-04-09 21:32:23 +08:00

104 lines
4.3 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:intl/intl.dart';
import 'package:yumi/app_localizations.dart';
class SCMDateUtils {
static const num ONE_HOUR = 3600000;
static const num ONE_DAY = 86400000;
static const num ONE_WEEK = 604800000;
static final String _ft1 = "yyyy-MM-dd";
static final String _ft2 = "yyyy/MM/dd/ HH:mm:ss";
static final String _ft3 = "yyyy-MM-dd HH:mm:ss";
static String formatDateTime(DateTime date) {
return DateFormat(_ft1).format(date);
}
static String formatDateTime2(DateTime date) {
return DateFormat(_ft2).format(date);
}
static String formatDateTime3(DateTime date) {
return DateFormat(_ft3).format(date);
}
static String formatMessageTime(BuildContext context, DateTime date) {
var now = DateTime.now();
num delta = now.millisecondsSinceEpoch - date.millisecondsSinceEpoch;
// LogUtils.log(
// "Delta:$delta,now.millisecondsSinceEpoch:${now.millisecondsSinceEpoch},date.millisecondsSinceEpoch:${date.millisecondsSinceEpoch}");
if (delta < 1 * ONE_DAY) {
if (date.day < now.day) {
return SCAppLocalizations.of(context)!.yesterday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
} else {
return "${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}";
}
} else if (delta < 1 * ONE_WEEK) {
switch (date.weekday) {
case DateTime.monday:
return SCAppLocalizations.of(context)!.monday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
case DateTime.tuesday:
return SCAppLocalizations.of(context)!.tuesday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
case DateTime.wednesday:
return SCAppLocalizations.of(context)!.wednesday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
case DateTime.thursday:
return SCAppLocalizations.of(context)!.thursday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
case DateTime.friday:
return SCAppLocalizations.of(context)!.friday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
case DateTime.saturday:
return SCAppLocalizations.of(context)!.saturday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
case DateTime.sunday:
return SCAppLocalizations.of(context)!.sunday(
"${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}",
);
}
} else {
return "${date.year}/${date.month}/${date.day} ${date.hour >= 10 ? date.hour : "0${date.hour}"}:${date.minute >= 10 ? date.minute : "0${date.minute}"}";
}
return "";
}
static int calculateDaysDifference(DateTime from, DateTime to) {
// 归一化日期(忽略时间部分,确保按整天计算)
from = DateTime(from.year, from.month, from.day);
to = DateTime(to.year, to.month, to.day);
// 计算差值并返回天数
return to.difference(from).inDays;
}
static String secondsToMinutes(int seconds) {
Duration duration = Duration(seconds: seconds);
return _df(duration);
}
static String millisecondsToMinutes(int milliseconds) {
Duration duration = Duration(milliseconds: milliseconds);
return _df(duration);
}
static String _df(Duration duration) {
String twoDigits(int n) => n.toString().padLeft(2, "0");
if (duration.inHours > 0) {
return "${twoDigits(duration.inHours)}:${twoDigits(duration.inMinutes.remainder(60))}:${twoDigits(duration.inSeconds.remainder(60))}";
} else {
return "${twoDigits(duration.inMinutes.remainder(60))}:${twoDigits(duration.inSeconds.remainder(60))}";
}
}
}