2017-11-07 6 views
0

스웨덴에서의 시간제 근무 급여를 계산하는 앱을 작성 중입니다. 특정 요일 사이의 특정 TimeInterval 사이에는 기본 급여에 대한 애드온이 있습니다. 나는 타이머를 시작하고 현재 시간을 시작 시간과 비교하여 경과 시간을 얻는다. 특정 시간 간격 (예 : 18:00 - 01:00, 다음 날 또는 01:00 - 06:00)에있는 경과 시간을 확인하려면 어떻게해야합니까? 지금까지 중첩 검사를 시도했지만 사용자가 간격 시간을 변경할 수있게하려고합니다.시간 간격 확인

+0

전체 시간이나 분을 측정해야합니까? –

+0

@ DávidPásztor 분 –

답변

0

endDatestartDate보다 24 시간보다 짧다고 가정하면 아래의 기능을 사용하여 두 날짜 사이의 경과 시간과 시간을 결정할 수 있습니다.

Date 개체 사이의 차이를 초 단위로 확인할 때 Date.timeIntervalSince(_ date:)을 사용하면 차이를 경과 시간/분을 지정하는 사람이 읽을 수있는 형식으로 쉽게 변환 할 수있는 것보다 더 쉽게 차이를 확인할 수 있습니다.

func timeElapsed(from startDate:Date,to endDate:Date)->DateComponents{ 
    let secondsElapsed = Int(endDate.timeIntervalSince(startDate)) 
    let minutes = (secondsElapsed%3600)/60 
    let hours = secondsElapsed/3600 
    return DateComponents(hour: hours, minute: minutes) 
} 

위의 기능은 일/월이 다른 경우에도 정상적으로 작동합니다.

일부 테스트 데이터 :

timeElapsed(from: Calendar.current.date(from: DateComponents(day: 1, hour: 18, minute: 0))!, to: Calendar.current.date(from: DateComponents(day: 2, hour: 6, minute: 14))!) //hour: 12 minute: 14 isLeapMonth: false 
timeElapsed(from: Calendar.current.date(from: DateComponents(day: 1, hour: 20, minute: 46))!, to: Calendar.current.date(from: DateComponents(day: 2, hour: 4, minute: 14))!) //hour: 7 minute: 28 isLeapMonth: false 
timeElapsed(from: Calendar.current.date(from: DateComponents(month: 1, day: 31, hour: 20, minute: 0))!, to: Calendar.current.date(from: DateComponents(month: 2, day: 1, hour: 4, minute: 0))!) //hour: 8 minute: 0 isLeapMonth: false 

당신은 쉽게 당신이 미래에 더해야합니다 결정하는 경우 DateComponents 이상을 반환하는 기능을 수정할 수 있습니다. 24 시간 차이가 두 날짜 사이에 더 클 수있는 경우 쉽게 조정할 수 있습니다.