如何使用除当前日期之外的自定义日期创建NSDate
对象?例如,我想创建一个昨天或两天前的var。
答案 0 :(得分:69)
您应该使用NSCalendar
来计算日期。例如,在Swift 3中,今天前两天的日期是:
let calendar = Calendar.current
let twoDaysAgo = calendar.date(byAdding: .day, value: -2, to: Date())
或者在Swift 2中:
let calendar = NSCalendar.currentCalendar()
let twoDaysAgo = calendar.dateByAddingUnit(.Day, value: -2, toDate: NSDate(), options: [])
要获得本月的第一天,您可以从当前日期获取日期,月份和年份,将日期调整为该月的第一天,然后创建新的日期对象。在Swift 3中:
var components = calendar.dateComponents([.year, .month, .day], from: Date())
components.day = 1
let firstOfMonth = calendar.date(from: components)]
或者在Swift 2中:
let components = calendar.components([.Year, .Month, .Day], fromDate: NSDate())
components.day = 1
let firstOfMonth = calendar.dateFromComponents(components)
NSCalendar
/ Calendar
课程中有很多有用的功能,因此您应该进一步调查。有关详细信息,请参阅NSCalendar class reference。
但我建议不要对日期对象进行任何手动调整,方法是将其调整一段时间间隔,该时间间隔是每天秒数的倍数(例如24 * 60 * 60)。如果您只是添加一些时间间隔,那么该技术可以正常工作,但是对于日期计算,您确实希望使用日历对象,以避免因夏令时等问题而产生的问题。
答案 1 :(得分:21)
这是 Swift 4.2 - XCode 10
的解决方案let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())
两天前相应:
let twoDaysAgo = Calendar.current.date(byAdding: .day, value: -2, to: Date())
答案 2 :(得分:2)
Swift 2.0代码
static func yesterDay() -> NSDate {
let today: NSDate = NSDate()
let daysToAdd:Int = -1
// Set up date components
let dateComponents: NSDateComponents = NSDateComponents()
dateComponents.day = daysToAdd
// Create a calendar
let gregorianCalendar: NSCalendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
let yesterDayDate: NSDate = gregorianCalendar.dateByAddingComponents(dateComponents, toDate: today, options:NSCalendarOptions(rawValue: 0))!
return yesterDayDate
}
答案 3 :(得分:2)
Rob的回答很有效。如果您正在大量使用这种计算,您甚至可以封装该逻辑并制作自己的自定义扩展和包装器。
那说我会建议你看看这个名为SwiftDate的神奇图书馆。即使您没有使用它,自述文件也值得一读。
它引入了定义或Region
,它对某些场景和一些方便的初始化器非常有用。
一些很酷的东西和样品:
(1.years - 2.hours + 16.minutes).fromNow()
let dateInUTC = (2015.years | 12.months | 25.days | 20.hours | 10.minutes).inUTCRegion
let date = 5.days.fromNow
,let date = 4.hours.ago
let date = (6.hours + 2.minutes).fromNow(region: inRome)
希望它有所帮助。
答案 4 :(得分:-1)
let twoDaysAgo = NSDate(timeIntervalSinceNow: -2*24*60*60)
答案 5 :(得分:-4)
请尝试以下代码。我认为这很简单。
let today = NSDate()
let tomorrow = today.dateByAddingTimeInterval(24 * 60 * 60)
let yesterday = today.dateByAddingTimeInterval(-24 * 60 * 60)
干杯!!!