NSDate of yesterday

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-27 06:57:48

You should use NSCalendar for calculating dates. For example, in Swift 3 the date two days before today is:

let calendar = Calendar.current
let twoDaysAgo = calendar.date(byAdding: .day, value: -2, to: Date())

Or in Swift 2:

let calendar = NSCalendar.currentCalendar()
let twoDaysAgo = calendar.dateByAddingUnit(.Day, value: -2, toDate: NSDate(), options: [])

Or to get the first of the month, you can get the day, month and year from the current date, adjust the day to the first of the month, and then create a new date object. In Swift 3:

var components = calendar.dateComponents([.year, .month, .day], from: Date())
components.day = 1
let firstOfMonth = calendar.date(from: components)]

Or in Swift 2:

let components = calendar.components([.Year, .Month, .Day], fromDate: NSDate())
components.day = 1
let firstOfMonth = calendar.dateFromComponents(components)

There are lots of useful functions in the NSCalendar/Calendar class, so you should investigate that further. See the NSCalendar class reference for more information.

But I would advise against doing any manual adjustments of date objects by adjusting it by some time interval that is a multiple of the seconds per day (e.g. 24*60*60). That technique works fine if you're just adding some time interval, but for date calculations, you really want to use calendar object, to avoid problems stemming from daylight savings and the like.

This is a solution for Swift 4.2 - XCode 10

let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())

Accordingly two days ago:

let twoDaysAgo = Calendar.current.date(byAdding: .day, value: -2, to: Date())

The Rob's answer works great. If you are heavily using that kind of calculations you can even encapsulate that logic and make your own custom extensions and wrappers.

That said i will suggest to take a look too at this fantastic library called SwiftDate. Even if you aren't using it, the README worth reading. It introduces the definition or Region that can be super useful for some scenarios and some handy initializers.

Some cool stuffs and samples:

  • Math operation with dates: (1.years - 2.hours + 16.minutes).fromNow()
  • Composing time components: let dateInUTC = (2015.years | 12.months | 25.days | 20.hours | 10.minutes).inUTCRegion
  • Classy: let date = 5.days.fromNow, let date = 4.hours.ago
  • With Regions: let date = (6.hours + 2.minutes).fromNow(region: inRome)
  • And a lot more ...

Hope it helps.

ZaEeM ZaFaR

Code for 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
}
let twoDaysAgo = NSDate(timeIntervalSinceNow: -2*24*60*60)

Please try below code. I think it's simple.

let today = NSDate()
let tomorrow = today.dateByAddingTimeInterval(24 * 60 * 60)
let yesterday = today.dateByAddingTimeInterval(-24 * 60 * 60)

Cheers!!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!