swift - 两个 Date 对象之间的所有日期 (Swift)

标签 swift nsdate nsdateformatter nscalendar nsdatecomponents

我正在使用 NSDateComponents() 创建一个日期。

let startDate = NSDateComponents()
startDate.year = 2015
startDate.month = 9
startDate.day = 1
let calendar = NSCalendar.currentCalendar()
let startDateNSDate = calendar.dateFromComponents(startDate)!

... 现在我想打印从 startDate 到今天的所有日期,NSDate()。我已经尝试过使用 NSCalendarUnit,但它只输出整个差异,而不是两者之间的单个日期。

let unit: NSCalendarUnit = [.Year, .Month, .Day, .Hour, .Minute, .Second]
let diff = NSCalendar.currentCalendar().components(unit, fromDate: startDateNSDate, toDate: NSDate(), options: [])

如何打印两个 Date 对象之间的所有日期?

编辑 2019

与此同时,类的命名发生了变化——NSDate 现在只是DateNSDateComponents 现在称为 DateComponentsNSCalendar.currentCalendar() 现在只是 Calendar.current

最佳答案

只要在日期上加上一天的单位,直到它到达 当前日期(Swift 2 代码):

var date = startDateNSDate // first date
let endDate = NSDate() // last date

// Formatter for printing the date, adjust it according to your needs:
let fmt = NSDateFormatter()
fmt.dateFormat = "dd/MM/yyyy"

// While date <= endDate ...
while date.compare(endDate) != .OrderedDescending {
    print(fmt.stringFromDate(date))
    // Advance by one day:
    date = calendar.dateByAddingUnit(.Day, value: 1, toDate: date, options: [])!
}

Swift 3 的更新:

var date = startDate // first date
let endDate = Date() // last date

// Formatter for printing the date, adjust it according to your needs:
let fmt = DateFormatter()
fmt.dateFormat = "dd/MM/yyyy"

while date <= endDate {
    print(fmt.string(from: date))
    date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
}

关于swift - 两个 Date 对象之间的所有日期 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536612/

相关文章:

swift - API 返回无效指针的问题

swift - swift 中的 ObjC block

swift - 如何使用 RXBluetoothKit for RxSwift 将写入特性和通知特性结合起来

iphone - 如何从约会中减去 30 分钟

objective-c - NSDate 的字符串描述

ios - 语言更改时字符串到日期的转换不起作用

ios - 使用 NSUserDefaults 保存高分

swift - 如何打开带有事件的日历 - NSURL calshow :

ios - 当 NSDate 为 nil 时,NSDateFormatter 返回(空)字符串

ios - 知道何时使用简称或完整的月份名称