2016-11-05 2 views
0

나는 문제가있어서 해결책을 찾지 못하는 것 같습니다. 날짜 선택기와 시작 날짜와 종료 날짜를 설정하는 두 개의 단추가 있습니다. 내 앱은이 두 날짜의 차이를 계산합니다.두 개의 NSDate의 계산 된 차이가 잘못됨 - 수정 됨

계산 된 차이가 올바르지 않습니다. 예를 들어 5 Nov, 2016을 첫 번째 날짜로 설정하고 6 Nov, 2016을 두 번째 날짜로 설정하면 코드에서 0 일의 차이를 반환합니다. 내가 7 Nov, 2016에 두 번째 날짜를 변경하면 I합니다 (차이가 제대로 계산되고firstDate5 Nov, 2016에 다음 lastDate6 Nov, 2016등을 설정하여 그것을 다른 방법을 수행 할 때 그것은 1일 등 그러나의 차이를 반환 출력은 1 일). 그것은 어떻게 든 당신이 먼저 설정 한 날짜에 달려 있습니다.

@IBOutlet weak var startDateOutput: UILabel! 
@IBOutlet weak var endDateOutput: UILabel! 
@IBOutlet weak var datePicker: UIDatePicker! 
@IBOutlet weak var answerFieldTimeDifference: UILabel! 

var firstDate:NSDate? 
var lastDate:NSDate? 

@IBAction func startButton(sender: AnyObject) 
{ 
    firstDate = datePicker.date 
    let dateStr = NSDateFormatter.localizedStringFromDate(firstDate!, dateStyle: NSDateFormatterStyle.MediumStyle, timeStyle: NSDateFormatterStyle.NoStyle) 
    startDateOutput.text = dateStr 

    daysBetweenDates() 
} 

@IBAction func expirationButton(sender: AnyObject) 
{ 
    lastDate = datePicker.date 
    let dateStr = NSDateFormatter.localizedStringFromDate(lastDate!, dateStyle: NSDateFormatterStyle.MediumStyle, timeStyle: NSDateFormatterStyle.NoStyle) 
    endDateOutput.text = dateStr 

    daysBetweenDates() 
} 

func daysBetweenDates() 
{ 
    if var firstDate = firstDate, var lastDate = lastDate 
    {   
     let calendar = NSCalendar.currentCalendar() 

     let firstDate = calendar.startOfDayForDate(firstDate) 
     let secondDate = calendar.startOfDayForDate(lastdate) 

     let components = calendar.components([.Day], fromDate: date1, toDate: date2, options: []) 

     var differenceInDays = components.day 

     answerFieldTimeDifference.text = String(differenceInDays) 
    }  
} 
+2

날짜 형식 지정 및 문자열 처리가 날짜 계산을 수행하는 적절한 방법이 아닙니다. 적절한 날짜 계산을하기 위해서'NSCalendar' 클래스를 사용하십시오. – rmaddy

+0

적절한 해결책은 http://stackoverflow.com/questions/24723431/swift-days-between-two-nsdates를 참조하십시오. – rmaddy

+0

이 새로운 방법을 시도했지만 한 날짜를 설정하려고하면 즉시 충돌합니다. 나 좀 도와 줄 수있어? – heisenberg

답변

0

나는 내 문제에 대한 해결책을 발견 :

여기 내 코드입니다.

는 I는() 함수

let firstDate = calendar.startOfDayForDate(firstDate) 
let secondDate = calendar.startOfDayForDate(lastdate) 

상기 코드는 업데이트되며 올바르게 차이를 계산한다 daysBetweenDates에 다음 두 라인을 추가했다.