2017-11-07 14 views
0

私はスウェーデンでの1時間ごとの仕事の給料を計算するはずのアプリを書いています。ある日の特定のTimeIntervalの間に、基本給にアドオンがあります。私はタイマーを開始し、現在の時間と開始時間を比較して経過時間を取得します。一定の時間間隔(18:00〜01:00翌日または01:00〜06:00)の経過時間を確認するにはどうすればよいですか。これまではチェックの場合は入れ子にしましたが、ユーザーがインターバル時間を変更できるようにしたいと考えています。時間間隔を確認する

+0

時間や分を測定するだけですか? –

+0

@DávidPásztor分 –

答えて

0

endDatestartDateよりも24時間遅れていると仮定すると、以下の機能を使用して、2つの日付の間の経過時間を時間と分で指定できます。

2つの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よりを戻すために機能を変更することができます。 2つの日付の間で24時間の差が大きい場合は、簡単に修正することもできます。

関連する問題