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

两个日期对象之间的所有日期(Swift),swift,nsdate,nsdateformatter,nscalendar,nsdatecomponents,Swift,Nsdate,Nsdateformatter,Nscalendar,Nsdatecomponents,我正在使用NSDateComponents()创建日期 。。。现在我想打印从开始日期到今天的所有日期,NSDate()。我已经尝试过使用NSCalendarUnit,但它只输出整个差异,而不是两个日期之间的单个日期 let unit: NSCalendarUnit = [.Year, .Month, .Day, .Hour, .Minute, .Second] let diff = NSCalendar.currentCalendar().components(unit, fromDate: s

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

。。。现在我想打印从
开始日期到今天的所有日期,
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
现在只是
Date
NSDateComponents
现在称为
DateComponents
NSCalendar.currentCalendar()
现在只是
Calendar.current

您想要的代码变成了

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


    var offsetComponents:NSDateComponents = NSDateComponents();
    offsetComponents.day = 1
    var nd:NSDate = startDateNSDate;

    println(nd)
    while nd.timeIntervalSince1970 < NSDate().timeIntervalSince1970 {
        nd = calendar.dateByAddingComponents(offsetComponents, toDate: nd, options: nil)!;
            println(nd)


    }
let startDate=NSDateComponents()
起始日期。年份=2015年
startDate.month=9
startDate.day=1
让calendar=NSCalendar.currentCalendar()
让startDateNSDate=calendar.dateFromComponents(startDate)!
var offsetComponents:NSDateComponents=NSDateComponents();
offsetComponents.day=1
变量nd:NSDate=startDateNSDate;
println(nd)
而nd.timeIntervalSince1970
只需在日期上添加一天单位,直到达到 当前日期(Swift 2代码):

var-date=startDateNSDate//第一个日期
让endDate=NSDate()//最后一个日期
//用于打印日期的格式化程序,可根据需要进行调整:
设fmt=NSDateFormatter()
fmt.dateFormat=“dd/MM/yyyy”
//当date我使用这种方法时(Swift 3):

输出为:

2017-01-02
2017-01-03
2017-01-04
2017-01-05
2017-01-06
2017-01-07
2017-01-08
2017-01-09
使用扩展名:

extension Date {
    static func dates(from fromDate: Date, to toDate: Date) -> [Date] {
        var dates: [Date] = []
        var date = fromDate
        
        while date <= toDate {
            dates.append(date)
            guard let newDate = Calendar.current.date(byAdding: .day, value: 1, to: date) else { break }
            date = newDate
        }
        return dates
    }
}

同样的事情,但更漂亮:

extension Date {

  func allDates(till endDate: Date) -> [Date] {
    var date = self
    var array: [Date] = []
    while date <= endDate {
      array.append(date)
      date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
    }
    return array
  }
}
这里是打印两个日期之间所有日期的解决方案(Swift 4代码)


@马丁:我得到了这个错误“二进制运算符”@Smita:你使用了答案第二部分的Swift 3代码了吗?你是否将
date
endDate
定义为
date
(而不是
NSDate
)?什么是“startDate”?@amin将date()改为startDate如果让date=Calendar.current.date(通过添加:.day,值:20,to:Date()){print(Date().allDates(till:Date))}Calendar.current.Date(通过添加:.day,值:1,to:Date)!
import Foundation

class Dates {
    static func printDatesBetweenInterval(_ startDate: Date, _ endDate: Date) {
        var startDate = startDate
        let calendar = Calendar.current

        let fmt = DateFormatter()
        fmt.dateFormat = "yyyy-MM-dd"

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

    static func dateFromString(_ dateString: String) -> Date {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"

        return dateFormatter.date(from: dateString)!
    }
}
Dates.printDatesBetweenInterval(Dates.dateFromString("2017-01-02"), Dates.dateFromString("2017-01-9"))
2017-01-02
2017-01-03
2017-01-04
2017-01-05
2017-01-06
2017-01-07
2017-01-08
2017-01-09
extension Date {
    static func dates(from fromDate: Date, to toDate: Date) -> [Date] {
        var dates: [Date] = []
        var date = fromDate
        
        while date <= toDate {
            dates.append(date)
            guard let newDate = Calendar.current.date(byAdding: .day, value: 1, to: date) else { break }
            date = newDate
        }
        return dates
    }
}
let datesBetweenArray = Date.dates(from: Date(), to: Date())
extension Date {

  func allDates(till endDate: Date) -> [Date] {
    var date = self
    var array: [Date] = []
    while date <= endDate {
      array.append(date)
      date = Calendar.current.date(byAdding: .day, value: 1, to: date)!
    }
    return array
  }
}
if let date = Calendar.current.date(byAdding: .day, value: 20, to: Date()) {
  print(Date().allDates(till: date))
}
var mydates : [String] = []
var dateFrom =  Date() // First date
var dateTo = Date()   // Last date

// Formatter for printing the date, adjust it according to your needs:
let fmt = DateFormatter()
fmt.dateFormat = "yyy-MM-dd"
dateFrom = fmt.date(from: strstartDate)! // "2018-03-01"
dateTo = fmt.date(from: strendDate)! // "2018-03-05"


while dateFrom <= dateTo {
    mydates.append(fmt.string(from: dateFrom))
    dateFrom = Calendar.current.date(byAdding: .day, value: 1, to: dateFrom)!

}

print(mydates) // Your Result
["2018-03-01", "2018-03-02", "2018-03-03", "2018-03-04", "2018-03-05"]