如何从NSDate获取没有时间的日期?

Gha*_*.64 33 objective-c nsdate

我想得到日期,NSDate不需要时间.例:

NSDate* today = [NSDate date];  // want to give 20-06-2012 only
Run Code Online (Sandbox Code Playgroud)

我想在没有显示时间的情况下获取今天的日期,并在NSDate变量或字符串变量中使用它.

jod*_*ody 43

万一其他人寻找这个.我使用了以下内容:

NSDateComponents *components = [[NSCalendar currentCalendar] 
             components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 
              fromDate:[NSDate date]];
NSDate *startDate = [[NSCalendar currentCalendar] 
             dateFromComponents:components];
Run Code Online (Sandbox Code Playgroud)

  • @KunalBalani,你有更快的选择吗? (4认同)
  • 这很慢. (3认同)

Mur*_*tam 10

在性能方面,这种方法可能比使用NSDateFormatterNSCalendar更好.

斯威夫特3

let timeInterval = floor(Date().timeIntervalSinceReferenceDate / 86400) * 86400
let newDate = Date(timeIntervalSinceReferenceDate: timeInterval)
Run Code Online (Sandbox Code Playgroud)

斯威夫特2

let timeInterval = floor(NSDate().timeIntervalSinceReferenceDate / 86400) * 86400
let newDate = NSDate(timeIntervalSinceReferenceDate: timeInterval)
Run Code Online (Sandbox Code Playgroud)

您还可以考虑时区(此功能是NSDate扩展的一部分):

斯威夫特3

extension Date {

    func dateWithoutTime() -> Date {
        let timeZone = TimeZone.current
        let timeIntervalWithTimeZone = self.timeIntervalSinceReferenceDate + Double(timeZone.secondsFromGMT())
        let timeInterval = floor(timeIntervalWithTimeZone / 86400) * 86400
        return Date(timeIntervalSinceReferenceDate: timeInterval)
    }

}
Run Code Online (Sandbox Code Playgroud)

斯威夫特2

extension NSDate {

    func dateWithoutTime() -> NSDate {
        let timeZone = NSTimeZone.localTimeZone()
        let timeIntervalWithTimeZone = self.timeIntervalSinceReferenceDate + Double(timeZone.secondsFromGMT)
        let timeInterval = floor(timeIntervalWithTimeZone / 86400) * 86400
        return NSDate(timeIntervalSinceReferenceDate: timeInterval)
    }

}
Run Code Online (Sandbox Code Playgroud)