Swift - 第三方日期处理库SwiftDate使用详解2(日期计算、比较、排序筛选)
三、日期操作、计算
(1)对一个日期进行加减计算。
let date0 = Date() print("当前日期:", date0) let date1 = date0 + 1.years + 1.months + 1.days print("计算后的日期1:", date1) let date2 = date0 - 1.hours print("计算后的日期2:", date2)
(2)两个日期相减
let date1 = Date() let date2 = date1 + 1.years + 1.months + 1.days print("日期1:", date1) print("日期2:", date2) let tem = date2 - date1 print("两个日期相差:\(tem.year!)年\(tem.month!)月\(tem.day!)天")
四、日期比较
(1)使用标准数学运算符(>、>=、<、<=、==)比较两个日期。
let date1 = "2018-12-12 10:30:00".toDate()!.date let date2 = "2020-01-01 11:30:00".toDate()!.date let date3 = "2020-01-01 11:30:00".toDate()!.date print("日期1 >= 日期2:", date1 >= date2) print("日期2 == 日期3:", date2 == date3)
(2)也可以按指定的粒度比较两个日期。
let date1 = "2017-12-12 10:30:00".toDate()!.date let date2 = "2018-12-01 11:30:00".toDate()!.date let date3 = "2018-12-08 10:30:00".toDate()!.date print("日期1:\(date1)") print("日期2:\(date2)") print("日期3:\(date3)") let result1 = date1.compare(toDate: date2, granularity: .month) == .orderedSame print("日期1与日期2年月是否相同:\(result1)") let result2 = date1.isBeforeDate(date2, orEqual: false, granularity: .year) print("日期1的年份是否在日期2年份前面:\(result2)") let result3 = date3.isAfterDate(date2, orEqual: true, granularity: .month) print("日期3是否在日期3之后的年月、或者统一年月:\(result3)")
(3)判断一个日期是否在一个日期范围中
let date1 = "2017-12-12 10:30:00".toDate()!.date let date2 = "2018-12-01 11:30:00".toDate()!.date let date3 = "2018-12-08 10:30:00".toDate()!.date //不指定粒度 date2.isInRange(date: date1, and: date3) //true //指定粒度 date2.isInRange(date: date1, and: date3, orEqual: true, granularity: .day) //true
(4)判断一个日期是否接近另一个日期(可指定精度)
let date1 = "2018-12-12 10:30:00".toDate()!.date let date2 = "2018-12-13 09:30:00".toDate()!.date var result = date1.compareCloseTo(date2, precision: 1.days.timeInterval) print("两个日期相差小于一天:\(result)") //true
(5)与内置的常用日期进行比较
let date = "2018-11-22 22:30:00".toDate()!.date print("测试日期时间:", date) print("") print("该日期时间是否是早上:", date.compare(.isMorning)) print("该日期时间是否是下午:", date.compare(.isAfternoon)) print("该日期时间是否是傍晚:", date.compare(.isEvening)) print("该日期时间是否是夜里:", date.compare(.isNight)) print("") print("该日期时间是否是今天:", date.compare(.isToday)) print("该日期时间是否是明天:", date.compare(.isTomorrow)) print("该日期时间是否是昨天:", date.compare(.isYesterday)) print("该日期时间是否是工作日:", date.compare(.isWeekday)) print("该日期时间是否是周末:", date.compare(.isWeekend)) print("该日期时间是否是过去的:", date.compare(.isInThePast)) print("该日期时间是否是将来的:", date.compare(.isInTheFuture)) print("") print("该日期时间是否是本周:", date.compare(.isThisWeek)) print("该日期时间是否是下周:", date.compare(.isNextWeek)) print("该日期时间是否是上周:", date.compare(.isLastWeek)) print("") print("该日期时间是否是今年:", date.compare(.isThisYear)) print("该日期时间是否是明年:", date.compare(.isNextYear)) print("该日期时间是否是去年:", date.compare(.isLastYear))
五、日期集合的排序、获取首尾日期
(1)将一个日期数组升序、降序排列。
let dates = ["2018-11-22 22:30:00".toDate()!, "2017-11-01 01:30:00".toDate()!, "2019-11-01 10:30:00".toDate()!] print("排序前:", dates) print("降序排列:", DateInRegion.sortedByNewest(list: dates)) print("升序排列:", DateInRegion.sortedByOldest(list: dates))
(2)获取一个日期数组中最早、最新的一个日期。
let dates = ["2018-11-22 22:30:00".toDate()!, "2017-11-01 01:30:00".toDate()!, "2019-11-01 10:30:00".toDate()!] print("最早的一个日期:", DateInRegion.oldestIn(list: dates)!.date) print("最新的一个日期:", DateInRegion.newestIn(list: dates)!.date)