NSCalendarを用いたを用いた日付の差分(1日前)を正確に表示する方法について紹介します。
現在の時刻と比較する時刻を用いて差分比較をすることで、「現在の時刻からの1日前」を表示します。
NSCalendarを用いた日付の差分計算
現在時刻を表すNSDate(currentTime)と差分を計算するNSDate(differenceTime)の比較を行い、秒・分・日の文字列を返す関数を作成します。
func timeDifferenceString(differenceTime: NSDate, currentTime: NSDate = NSDate()) -> String {
guard let calender = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) else {
return ""
}
let unitFlags: NSCalendarUnit = [.Second, .Minute, .Hour, .Day]
let compareCalendar = calender.components(unitFlags, fromDate: differenceTime, toDate: NSDate(), options: [])
let currentCalendar = calender.components(unitFlags, fromDate: currentTime)
if (compareCalendar.day == 1 && currentCalendar.hour > compareCalendar.hour) || (compareCalendar.day == 0 && currentCalendar.hour < compareCalendar.hour) {
return "昨日"
} else if compareCalendar.hour > 0 {
return "\(compareCalendar.hour)時間前"
} else if compareCalendar.minute > 0 {
return "\(compareCalendar.minute)分前"
} else if compareCalendar.second > 0 {
return "\(compareCalendar.second)秒前"
}
return ""
}
NSCalenderのcomponentsで作成しているcompareCalendar.dayの値が"1"のとき、「1日前」と判定せず、
compareCalendar.dayの値が"1"のとき
if compareCalendar.day == 1 {
return "昨日"
}
現在の時刻(currentCalendar.hour)と比較する時刻(compareCalendar.hour)を用いて差分比較をすることで、「現在の時刻からの1日前」を表示します。
compareCalendar.dayの値が"1"のとき
if (compareCalendar.day == 1 && currentCalendar.hour > compareCalendar.hour) || (compareCalendar.day == 0 && currentCalendar.hour < compareCalendar.hour) {
return "昨日"
}