2016-10-04 50 views
0

我想打印日期[1,2,3 ....當前日期]但沒有得到正確的結果。 因爲當我設置第一天是我的代碼中的「1」,輸出在[2,3,4]。而當我設定的日子是「0」。它的結果顯示正確,但顯示一個額外的日期[1,2,3,4,5]。今天是2016年10月4日,作爲我的時區。日期沒有正確使用NSDate在Swift中

let date = NSDate() 
    let components = NSCalendar.currentCalendar().components([.Day , .Month , .Year], fromDate: date) 
    let year = components.year 
    let month = components.month 
    let day = 1 // Output is [2,3,4] 
// let day = 0 than o/p [1,2,3,4,5] 


    dateFormatatter.dateFormat = "MMMM yyyy" 
    monthNameLabel.text = dateFormatatter.stringFromDate(date) 

    startDate.year = year 
    startDate.month = month 
    startDate.day = day 
    let startDateNSDate = calendar.dateFromComponents(startDate)! 

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

    dateFormatatter.dateFormat = "dd" 


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


     let dateFormat1 = NSDateFormatter() 
     dateFormat1.dateFormat = "dd-MM-yyyy" 

     dateArrayCalendar.addObject(dateFormatatter.stringFromDate(dateStart)) 
     dateArrayForCompare.addObject(dateFormat1.stringFromDate(dateStart)) 

    } 

而且我想造成這樣的[1,2,3,4]

而同樣的問題在這裏

let componentsForCompare = calendar.components([.Year, .Month], fromDate: date) 
     let startOfMonth = calendar.dateFromComponents(componentsForCompare)! 
     print(startOfMonth)//2016-09-30 18:30:00 +0000 
     print(dateFormatatter.stringFromDate(startOfMonth)) //01 

其給出不同的輸出

回答

0

您需要在while循環的末尾處增加日期,而不是在開始處:

while dateStart.compare(endDate) != .OrderedDescending { 
    // print(fmt.stringFromDate(date)) 
    // Advance by one day: 

    let dateFormat1 = NSDateFormatter() 
    dateFormat1.dateFormat = "dd-MM-yyyy" 

    dateArrayCalendar.addObject(dateFormatatter.stringFromDate(dateStart)) 
    dateArrayForCompare.addObject(dateFormat1.stringFromDate(dateStart)) 

    dateStart = calendar.dateByAddingUnit(.Day, value: 1, toDate: dateStart, options: [])! 
} 
+0

當我運行這段代碼時,我得到了'[「01」,「02」,「03」,「04」]' - 這裏是我的代碼,直接從我的操場 - https://gist.github.com/paulw11/278447c9678428fa584319a4d95c2fac你的代碼在你的問題中沒有完成,所以我必須聲明一些變量,也許這導致我得到不同的結果? – Paulw11

+0

你是什麼意思? – Paulw11

+0

如果我設置day = 1並檢入dataArray日曆,它會在後端顯示第一個日期爲30-09-2016。查看上傳圖像 – iDeveloper