| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- //
- // Date+Extension.swift
- // Lanu
- //
- // Created by OneeChan on 2025/12/14.
- //
- import Foundation
- extension Date {
- // 辅助方法:格式化 "时:分"(补零,如 09:05)
- func formattedTime() -> String {
- let formatter = DateFormatter()
- formatter.locale = curLocal
- formatter.dateFormat = "HH:mm"
- return formatter.string(from: self)
- }
-
- // 辅助方法:格式化 "星期一"
- func formattedWeek() -> String {
- let formatter = DateFormatter()
- formatter.locale = curLocal
- formatter.dateFormat = "EEEE"
- return formatter.string(from: self)
- }
-
- // 辅助方法:格式化 "星期 时:分"(如 星期一 09:30)
- func formattedWeekWithTime() -> String {
- let formatter = DateFormatter()
- formatter.locale = curLocal
- formatter.dateFormat = "EEEE HH:mm"
- return formatter.string(from: self)
- }
-
- // 辅助方法:格式化 "月/日"(如 10/23)
- func formattedDate(_ separator: String = "/") -> String {
- let formatter = DateFormatter()
- formatter.locale = curLocal
- formatter.dateFormat = "MM\(separator)dd"
- return formatter.string(from: self)
- }
-
- // 辅助方法:格式化 "月/日 时:分"(如 10/23 14:30)
- func formattedDateWithTime(_ separator: String = "/") -> String {
- let formatter = DateFormatter()
- formatter.locale = curLocal
- formatter.dateFormat = "MM\(separator)dd HH:mm"
- return formatter.string(from: self)
- }
-
- // 辅助方法:格式化 "日/月/年"(如 23/10/2025)
- func formattedFullDate(_ separator: String = "/", normal: Bool = false) -> String {
- let formatter = DateFormatter()
- formatter.locale = curLocal
- if normal {
- formatter.dateFormat = "yyy\(separator)MM\(separator)dd"
- } else {
- formatter.dateFormat = "dd\(separator)MM\(separator)yyyy"
- }
- return formatter.string(from: self)
- }
-
- // 辅助方法:格式化 "年/月/日 时:分"(如 2025/10/23 14:30)
- func formattedFullDateWithTime(_ separator: String = "/") -> String {
- let formatter = DateFormatter()
- formatter.locale = curLocal
- formatter.dateFormat = "dd\(separator)MM\(separator)yyyy HH:mm"
- return formatter.string(from: self)
- }
-
- var tencentIMTimeDesc: String {
- if self == Date.distantPast {
- return ""
- }
-
- let dateFmt = DateFormatter()
- dateFmt.locale = curLocal
-
- var calendar = Calendar.current
- calendar.firstWeekday = 7
-
- let nowComponent: DateComponents = calendar.dateComponents([.day, .month, .year, .weekOfMonth], from: Date())
- let dateComponent: DateComponents = calendar.dateComponents([.day, .month, .year, .weekOfMonth], from: self)
-
- if nowComponent.year == dateComponent.year {
- if nowComponent.month == dateComponent.month {
- if nowComponent.weekOfMonth == dateComponent.weekOfMonth {
- if nowComponent.day == dateComponent.day {
- dateFmt.dateFormat = "HH:mm"
- } else {
- dateFmt.dateFormat = "EEEE"
- }
- } else {
- dateFmt.dateFormat = "MM/dd"
- }
- } else {
- dateFmt.dateFormat = "MM/dd"
- }
- } else {
- dateFmt.dateFormat = "dd/MM/yyyy"
- }
-
- return dateFmt.string(from: self)
- }
-
- func yearAgo(_ year: Int) -> Date {
- let calendar = Calendar.current
- let yearsAgoComponents = DateComponents(year: year, day: -1)
- guard let yearsAgo = calendar.date(byAdding: yearsAgoComponents, to: Date()) else {
- return Date()
- }
-
- return yearsAgo
- }
- }
- extension Date {
- var inMinutes: Bool {
- timeIntervalSince1970.inMinutes
- }
-
- var inHour: Bool {
- timeIntervalSince1970.inHour
- }
-
- var inDay: Bool {
- timeIntervalSince1970.inDay
- }
-
- var isSameDay: Bool {
- Calendar.current.isDate(Date(), inSameDayAs: self)
- }
- }
|