| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- //
- // CCDataExtension.swift
- // JChat
- //
- // Created by deng on 2017/2/16.
- // Copyright © 2017年 HXHG. All rights reserved.
- //
- import UIKit
- let FORMAT_PAST_SHORT:String = "yyyy/MM/dd"
- let FORMAT_PAST_TIME:String = "ahh:mm"
- let FORMAT_THIS_WEEK:String = "eee ahh:mm"
- let FORMAT_THIS_WEEK_SHORT:String = "eee"
- let FORMAT_YESTERDAY:String = "ahh:mm"
- let FORMAT_TODAY:String = "ahh:mm"
- let D_MINUTE = 60.0
- let D_HOUR = 3600.0
- let D_DAY = 86400.0
- let D_WEEK = 604800.0
- let D_YEAR = 31556926.0
- internal let componentFlags: NSCalendar.Unit = [.year, .month, .day, .weekday, .hour, .minute, .second, .weekdayOrdinal]
- extension Date {
- static func currentCalendar1() -> Calendar{
- let calendar = Calendar.autoupdatingCurrent
- return calendar
- }
-
- func isEqualToDateIgnoringTime(_ date:Date) -> Bool{
- let components1:DateComponents = (Date.currentCalendar() as NSCalendar).components(componentFlags, from: self)
- let components2:DateComponents = (Date.currentCalendar() as NSCalendar).components(componentFlags, from: date)
- return (components1.year == components2.year) && (components1.month == components2.month) && ((components1).day == components2.day)
-
- }
-
- func dateByAddingDays(_ days:Int) -> Date {
- var dateComponents = DateComponents()
- dateComponents.day = days
- let newDate:Date = (Calendar.current as NSCalendar).date(byAdding: dateComponents, to: self, options:NSCalendar.Options(rawValue: 0))!
- return newDate
- }
-
- func dateBySubtractingDays(_ days:Int) -> Date {
- return self.dateByAddingDays(days * -1)
- }
-
- static func dateWithDaysFromNow(_ days:Int) -> Date {
- return Date().dateByAddingDays(days)
- }
-
- static func dateWithDaysBeforeNow(_ days:Int) -> Date {
- return Date().dateBySubtractingDays(days)
- }
-
- static func dateTomorrow() -> Date{
- return Date.dateWithDaysFromNow(1)
- }
-
- static func dateYesterday() -> Date {
-
- return Date.dateWithDaysBeforeNow(1)
- }
-
- func isToday() -> Bool {
- return self.isEqualToDateIgnoringTime(Date())
- }
-
- func isTomorrow() -> Bool {
- return self.isEqualToDateIgnoringTime(Date.dateTomorrow())
- }
-
- func isYesterday() -> Bool {
- return self.isEqualToDateIgnoringTime(Date.dateYesterday())
- }
-
- func isSameWeekAsDate(_ date:Date) -> Bool {
- let components1:DateComponents = (Date.currentCalendar1() as NSCalendar).components(componentFlags, from: self)
- let components2:DateComponents = (Date.currentCalendar1() as NSCalendar).components(componentFlags, from: date)
- if components1.weekOfYear != components2.weekOfYear { return false }
- return (fabs(self.timeIntervalSince(date)) < D_WEEK)
- }
-
- func isThisWeek() -> Bool {
- return self.isSameWeekAsDate(Date())
- }
-
- func isThisYear() -> Bool {
- let calendar = NSCalendar.current
- let year1 = calendar.component(.year, from: Date())
- let year2 = calendar.component(.year, from: self)
- return year1 == year2
- }
-
- func conversationDate() -> String {
-
- // yy-MM-dd hh:mm
- // MM-dd hh:mm
- // 星期一 hh:mm - 7 * 24小时内
- // 昨天 hh:mm - 2 * 24小时内
- // 今天 hh:mm - 24小时内
-
- let s1 = TimeInterval(self.timeIntervalSince1970)
- let s2 = TimeInterval(time(nil))
-
- let dz = TimeInterval(TimeZone.current.secondsFromGMT())
-
- let formatter = DateFormatter()
- // let format1 = DateFormatter.dateFormat(fromTemplate: "hh:mm", options: 0, locale: nil) ?? "hh:mm"
-
- let days1 = Int64(s1 + dz) / (24 * 60 * 60)
- let days2 = Int64(s2 + dz) / (24 * 60 * 60)
-
- switch days1 - days2 {
- case +0:
- // Today
- // formatter.dateFormat = "\(format1)"
- formatter.dateFormat = "hh:mm"
- case +1:
- // Tomorrow
- formatter.dateFormat = "'明天'"
- case +2 ... +7:
- // 2 - 7 day later
- formatter.dateFormat = "EEEE"
- case -1:
- formatter.dateFormat = "'昨天'"
- case -2:
- formatter.dateFormat = "'前天'"
- case -7 ... -2:
- // 2 - 7 day ago
- formatter.dateFormat = "EEEE"
- default:
- // Distant
- if self.isThisYear() {
- formatter.dateFormat = "MM-dd"
- } else {
- formatter.dateFormat = "yy-MM-dd"
- }
- }
- return formatter.string(from: self)
- }
- }
|