NSDate昨天

时间:2014-11-15 03:15:11

标签: swift nsdate

如何使用除当前日期之外的自定义日期创建NSDate对象?例如,我想创建一个昨天或两天前的var。

6 个答案:

答案 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.fromNowlet 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)

干杯!!!