2016-07-26 9 views
1

私は2倍の差を計算したいと思っています。それらは次の通りです:その後、それらを添付した日付を持っていないよう日付を記入しないで2回の間に分を計算する

startDate = "23:51" 
endDate = "00:01" 

彼らはタイプStringの両方です。私は一般的な方法は、Dateの両方を変換することと、その後NSCalendarを使用して時間差を計算します知っている:

extension Date { 
    func minutes(from date: Date) -> Int { 
     return Calendar.current.components(.minute, from: date, to: self, options: []).minute ?? 0 
    } 
} 

日、月、などが不明であるしかし、これは誤った結果を生成します。どうすればこれを達成できますか?ここで

+0

この回答はタイムゾーンと日によって異なります。真夜中の夏時間の移行 –

+0

いくつかの仮定をしない限り、解答は曖昧です。時間はいつも同じ日付に起こると仮定したいですか?もしそうなら、問題はかなり単純です。そうでない場合は、時間帯が異なる日付を決定するためにどのようなルールを使用したいですか? –

+0

日とモントが不明な場合は考慮しないでください。 – Kubba

答えて

3

NSDateを使用せずに違いを見つけるための非常に基本的な方法です:

let startDate = "23:51" 
let endDate = "00:01" 

let startArray = startDate.componentsSeparatedByString(":") // ["23", "51"] 
let endArray = endDate.componentsSeparatedByString(":") // ["00", "01"] 

let startHours = Int(startArray[0])! * 60 // 1380 
let startMinutes = Int(startArray[1])! + startHours // 1431 

let endHours = Int(endArray[0])! * 60 // 0 
let endMinutes = Int(endArray[1])! + endHours // 1 

var timeDifference = endMinutes - startMinutes // -1430 

let day = 24 * 60 // 1440 

if timeDifference < 0 { 
    timeDifference += day // 10 
} 

そして最後にtimeDifference10に等しいです。

この関数は、終了日が開始日の後に行われることを前提としています。したがって、終了日が開始日より前の時刻であれば、1440分(1日)が加算されます。また、日付の形式は「hh:mm」で、時間の範囲は0〜24、分の範囲は0〜60です。

+1

これはまさに私が探していたものです。ありがとうございます。 –

+0

@AlexanderMacLeod、それはうれしかった。 – WMios

関連する問題