一、简介
DateInterval以[startDate,endDate]的形式表示日期间隔的闭区间。起始日期和结束日期可以相同,此时持续时间为0。DateInterval不支持反向,即开始日期晚于结束日期。
通常调用Calendar的dateInterval获取日期间隔。
二、API
- 属性值
- 开始时间
public var start: Date
- 结束时间
public var end: Date
- 持续时间
public var duration: TimeInterval
//当前日期属于哪一个小时段
let d = Calendar.current.dateInterval(of: .hour, for: Date())
print(d, d?.start, d?.end, d?.duration, separator: "\n")
//Optional(2020-12-10 01:00:00 +0000 to 2020-12-10 02:00:00 +0000)
//Optional(2020-12-10 01:00:00 +0000)
//Optional(2020-12-10 02:00:00 +0000)
//Optional(3600.0)
- 初始化
- 空初始化
public init()
以当前日期为开始、结束日期进行初始化
var di = DateInterval()
print(di)
//2020-12-10 01:55:26 +0000 to 2020-12-10 01:55:26 +0000
- 通过开始与结束日期
public init(start: Date, end: Date)
需要满足end >= start
var di = DateInterval(start: Date(), end: Date()+100)
print(di)
//2020-12-10 01:59:52 +0000 to 2020-12-10 02:01:32 +0000
- 通过开始日期与持续时间
public init(start: Date, duration: TimeInterval)
需要满足duration>=0
var di = DateInterval(start: Date(), duration: 60)
print(di)
//2020-12-10 02:01:26 +0000 to 2020-12-10 02:02:26 +0000
- 运算
- 比较
public func compare(_ dateInterval: DateInterval) -> ComparisonResult
enum ComparisonResult : Int {
case orderedAscending = -1//升序
case orderedSame = 0//相同
case orderedDescending = 1//降序
}
按开始日期优先排序。如果开始日期相等,则将按持续时间排序。
var di = DateInterval(start: Date(), duration: 60)
var di1 = DateInterval(start: di.start-10, end: di.end)
print(di.compare(di1).rawValue)
//1
- 与dateInterval是否有交集
public func intersects(_ dateInterval: DateInterval) -> Bool
var di = DateInterval(start: Date(), duration: 60)
var di1 = DateInterval(start: di.start-10, end: di.end)
print(di.intersects(di1))
//true
- 与dateInterval的交集
public func intersection(with dateInterval: DateInterval) -> DateInterval?
无交集则返回nil
var di = DateInterval(start: Date(), duration: 60)
var di1 = DateInterval(start: di.start-10, duration: 20)
print(di, di1, di.intersection(with: di1), separator: "\n")
//2020-12-10 02:15:31 +0000 to 2020-12-10 02:16:31 +0000
//2020-12-10 02:15:21 +0000 to 2020-12-10 02:15:41 +0000
//Optional(2020-12-10 02:15:31 +0000 to 2020-12-10 02:15:41 +0000)
- 是否包含某日期
public func contains(_ date: Date) -> Bool
闭区间包括边界
var di = DateInterval(start: Date(), duration: 60)
print(di.contains(di.start))
- 运算符
== 是否相等,相当于compare
方法返回orderedSame
< 是否小于,相当于compare
方法返回orderedAscending
网友评论