formatTimestampWithFullAndSimple function

FormatTimestampWithFullAndSimpleResult formatTimestampWithFullAndSimple(
  1. int timestamp
)

格式化时间戳,返回完整和简略两种格式

返回格式: { full: 完整日期信息, simple: 简略日期信息 }

full 格式:

  • 本年:M月d日 周几 上午/中午/下午/晚上/凌晨 H:mm
  • 非本年:yyyy年 M月d日 周几 上午/中午/下午/晚上/凌晨 H:mm

simple 格式:

  • 今天:上午/中午/下午/晚上/凌晨 H:mm
  • 昨天:昨天 上午/中午/下午/晚上/凌晨 H:mm
  • 本周:周几 上午/中午/下午/晚上/凌晨 H:mm
  • 本年:M月d日 上午/中午/下午/晚上/凌晨 H:mm
  • 非本年:yyyy年 M月d日 上午/中午/下午/晚上/凌晨 H:mm

Implementation

FormatTimestampWithFullAndSimpleResult formatTimestampWithFullAndSimple(int timestamp) {
  timestamp = _normalizeTimestamp(timestamp);

  final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp);
  final DateTime now = DateTime.now();

  // 关键时间点
  final DateTime startOfYear = DateTime(now.year, 1, 1);
  final DateTime startOfWeek = now.subtract(Duration(days: now.weekday - 1));
  final DateTime startOfWeekMidnight = DateTime(startOfWeek.year, startOfWeek.month, startOfWeek.day);
  final DateTime todayMidnight = DateTime(now.year, now.month, now.day);
  final DateTime yesterdayMidnight = todayMidnight.subtract(const Duration(days: 1));

  // 判断是否为今年
  final bool isThisYear = dateTime.isAfter(startOfYear) || dateTime.isAtSameMomentAs(startOfYear);

  // 判断是否为今天
  final bool isToday = dateTime.isAfter(todayMidnight);

  // 判断是否为昨天
  final bool isYesterday = dateTime.isAfter(yesterdayMidnight) && dateTime.isBefore(todayMidnight);

  // 判断是否在本周
  final bool isThisWeek = dateTime.isAfter(startOfWeekMidnight) || dateTime.isAtSameMomentAs(startOfWeekMidnight);

  // 获取时间段
  final String period = _getPeriod(dateTime.hour);

  // 格式化时间(HH:mm)
  final String timeStr = '${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}';

  // 获取星期几
  final String weekday = _getWeekday(dateTime.weekday);

  // 构建完整的日期部分
  String fullDatePart;
  if (!isThisYear) {
    fullDatePart = '${dateTime.year}年${dateTime.month}月${dateTime.day}日 $weekday';
  } else {
    fullDatePart = '${dateTime.month}月${dateTime.day}日 $weekday';
  }

  // 构建完整格式
  final String full = '$fullDatePart $period $timeStr';

  // 构建简略格式
  String simple;
  if (isToday) {
    simple = '$period $timeStr';
  } else if (isYesterday) {
    simple = '昨天 $period $timeStr';
  } else if (isThisWeek) {
    simple = '$weekday $period $timeStr';
  } else if (isThisYear) {
    simple = '${dateTime.month}月${dateTime.day}日 $period $timeStr';
  } else {
    simple = '${dateTime.year}年${dateTime.month}月${dateTime.day}日 $period $timeStr';
  }

  return FormatTimestampWithFullAndSimpleResult(full: full, simple: simple);
}