formatTimestamp function
格式化时间戳(兼容10位和13位)
- 超过今年:返回 yyyy年MM月dd日
- 今年内但不在本周:返回 MM月dd日
- 本周但不是昨天:返回 周几
- 昨天:返回 昨天
- 今天:返回(上午/中午/下午/晚上/凌晨 HH:mm)
Implementation
String formatTimestamp(int timestamp) {
timestamp = _normalizeTimestamp(timestamp);
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp);
final DateTime now = DateTime.now();
// 2. 今年的开始时间
final DateTime startOfYear = DateTime(now.year, 1, 1);
// 3. 本周的开始时间(周一)
final DateTime startOfWeek = now.subtract(Duration(days: now.weekday - 1));
final DateTime startOfWeekMidnight = DateTime(startOfWeek.year, startOfWeek.month, startOfWeek.day);
// 4. 今天的开始时间
final DateTime todayMidnight = DateTime(now.year, now.month, now.day);
// 5. 昨天的开始时间
final DateTime yesterdayMidnight = todayMidnight.subtract(const Duration(days: 1));
// 判断是否超过今年
if (dateTime.isBefore(startOfYear)) {
return '${dateTime.year}年${dateTime.month}月${dateTime.day}日';
}
// 判断是否不在本周(且在今年内)
if (dateTime.isBefore(startOfWeekMidnight)) {
return '${dateTime.month}月${dateTime.day}日';
}
// 判断是否是昨天
if (dateTime.isAfter(yesterdayMidnight) && dateTime.isBefore(todayMidnight)) {
return '昨天';
}
// 判断是否是今天
if (dateTime.isAfter(todayMidnight)) {
final String timeStr = '${dateTime.hour}:${dateTime.minute}';
final String period = _getPeriod(dateTime.hour);
return '$period $timeStr';
}
// 本周但不是昨天,返回周几
return _getWeekday(dateTime.weekday);
}