chỉnh sửa/Cập nhật: Xcode 8.3. 2 • Swift 3.1
Nó là rất dễ dàng nếu bạn sử dụng phần mở rộng và phương pháp Lịch để giúp bạn với các tính toán calendrical của bạn: Kiểm tra
extension Date {
var yearsFromNow: Int { return Calendar.current.dateComponents([.year], from: self, to: Date()).year ?? 0 }
var monthsFromNow: Int { return Calendar.current.dateComponents([.month], from: self, to: Date()).month ?? 0 }
var weeksFromNow: Int { return Calendar.current.dateComponents([.weekOfYear], from: self, to: Date()).weekOfYear ?? 0 }
var daysFromNow: Int { return Calendar.current.dateComponents([.day], from: self, to: Date()).day ?? 0 }
var hoursFromNow: Int { return Calendar.current.dateComponents([.hour], from: self, to: Date()).hour ?? 0 }
var minutesFromNow: Int { return Calendar.current.dateComponents([.minute], from: self, to: Date()).minute ?? 0 }
var secondsFromNow: Int { return Calendar.current.dateComponents([.second], from: self, to: Date()).second ?? 0 }
var relativeTime: String {
if yearsFromNow > 0 { return "\(yearsFromNow) year" + (yearsFromNow > 1 ? "s" : "") + " ago" }
if monthsFromNow > 0 { return "\(monthsFromNow) month" + (monthsFromNow > 1 ? "s" : "") + " ago" }
if weeksFromNow > 0 { return "\(weeksFromNow) week" + (weeksFromNow > 1 ? "s" : "") + " ago" }
if daysFromNow > 0 { return daysFromNow == 1 ? "Yesterday" : "\(daysFromNow) days ago" }
if hoursFromNow > 0 { return "\(hoursFromNow) hour" + (hoursFromNow > 1 ? "s" : "") + " ago" }
if minutesFromNow > 0 { return "\(minutesFromNow) minute" + (minutesFromNow > 1 ? "s" : "") + " ago" }
if secondsFromNow > 0 { return secondsFromNow < 15 ? "Just now"
: "\(secondsFromNow) second" + (secondsFromNow > 1 ? "s" : "") + " ago" }
return ""
}
}
let calendar = Calendar.current
let date1 = DateComponents(calendar: calendar, year: 2016, month: 3, day: 14, hour: 22, minute: 39).date!
let date2 = DateComponents(calendar: calendar, year: 2017, month: 5, day: 18, hour: 22, minute: 39).date!
let date3 = DateComponents(calendar: calendar, year: 2017, month: 6, day: 2, hour: 12, minute: 38).date!
let date4 = DateComponents(calendar: calendar, year: 2017, month: 6, day: 3, hour: 14, minute: 45).date!
let date5 = DateComponents(calendar: calendar, year: 2017, month: 6, day: 3, hour: 15, minute: 18).date!
let timeOffset1 = date1.relativeTime // "1 year ago"
let timeOffset2 = date2.relativeTime // "2 weeks ago"
let timeOffset3 = date3.relativeTime // "Yesterday"
let timeOffset4 = date4.relativeTime // "33 minutes ago"
let timeOffset5 = date5.relativeTime // "Just now"
Ý của bạn là "2 ngày trước", "1 tuần trước"? –
https://github.com/melvitax/AFDateHelper Repo github này có chức năng ngày tương đối tốt mà bạn có thể chỉnh sửa cho phù hợp với dự án của mình. Hy vọng rằng sẽ giúp! – Ian
@MikeTaverne Vâng, đó chính xác là những gì tôi đang cố gắng làm. –