我正在使用一个名为 DateToolsSwift 的包。现在,每当我想向 Date 对象添加一天时,我都会这样做
let date = Date().add(TimeChunk(seconds: 0, minutes: 0, hours: 0, days: 3, weeks: 0, months: 0, years: 0))
这段代码太长了,感觉不太对劲。所以我的问题是,这是在 DateToolsSwift 中执行此操作的方法吗?还是我做错了?
*不使用 DateToolsSwift。例如,如果您想在 1970 年 1 月 1 日添加 3 天
let aDate = Date(timeIntervalSince1970: 0)
var dateComponent = DateComponents()
dateComponent.day = 3
let next3Days = Calendar.current.date(byAdding: dateComponent, to: aDate)
同样,如果您想添加今天的天数,也可以设置
aDate = Date()
。
编辑
或者,来自@CodeDifferent
let next3Days = Calendar.current.date(byAdding: .day, value: 3, to: aDate)!
DateToolsSwift 包在 Integer+DateTools.swift 中定义了扩展方法,允许简单地创建
TimeChunk
s,例如3.days
或2.weeks
。因此你可以做
let date = Date().add(3.days)
或者,由于 DateToolsSwift 还定义了自定义
+
运算符,
let date = Date() + 3.days
如果您想要一次拍摄中添加任意时间的扩展可能性
extension Date {
public enum DateElement {
case seconds(Int)
case minutes(Int)
case hours(Int)
case days(Int)
case months(Int)
case years(Int)
}
public func add(_ time: DateElement...) -> Date? {
var dateComponent = DateComponents()
for e in time {
switch e {
case .seconds(let seconds):
dateComponent.second = seconds
case .minutes(let minutes):
dateComponent.minute = minutes
case .hours(let hours):
dateComponent.hour = hours
case .days(let days):
dateComponent.day = days
case .months(let months):
dateComponent.month = months
case .years(let years):
dateComponent.year = years
}
}
return Calendar.current.date(byAdding: dateComponent, to: self)
}
}
let somewhereLater = Date().add(.hours(2), .days(5), .months(1))