返回 导航

Swift

hangge.com

Swift - 第三方日期处理库SwiftDate使用详解2(日期计算、比较、排序筛选)

作者:hangge | 2018-11-26 08:10

三、日期操作、计算

(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)
评论

全部评论(0)

回到顶部