LoginSignup
2
2

More than 5 years have passed since last update.

NSCalendarを用いた日付の差分(1日前)を正確に表示する方法

Posted at

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 "昨日"
    }
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2