LoginSignup
0
0

More than 5 years have passed since last update.

NSDate-EscortをSwift化(一部) (一応Swiftの日付操作ライブラリとしても使えます)

Last updated at Posted at 2017-04-20

NSDate-Escort(Objective-CのNSDate型拡張ライブラリ)をSwiftのDate型拡張ライブラリとして書き直しました。
Swift3に移行する際に一時的な処置として使ってみてください。
※一応Swiftの日付操作ライブラリとしても使えますがメソッド名とかは変えたほうが良さげですね。

github: https://github.com/azu/NSDate-Escort

import Foundation

extension Date {
    fileprivate var calendar: Calendar! {
        return Calendar.current
    }

    var seconds: Int {
        return self.calendar.component(.second, from: self)
    }

    var minute: Int {
        return self.calendar.component(.minute, from: self)
    }

    var hour: Int {
        return self.calendar.component(.hour, from: self)
    }

    var day: Int {
        return self.calendar.component(.day, from: self)
    }

    var month: Int {
        return self.calendar.component(.month, from: self)
    }

    var week: Int {
        return self.calendar.component(.weekOfMonth, from: self)
    }

    var weekday: Int {
        return self.calendar.component(.weekday, from: self)
    }

    var year: Int {
        return self.calendar.component(.year, from: self)
    }
}

extension Date {
    func isToday() -> Bool {
        return self.calendar.isDateInToday(self)
    }

    func isEqualToDate(_ date: Date) -> Bool {
        return self == date
    }

    func isEarlierThanDate(_ date: Date) -> Bool {
        return self < date
    }

    func isLaterThanDate(_ date: Date) -> Bool {
        return self > date
    }

    func isEarlierThanOrEqualDate(_ date: Date) -> Bool {
        return self < date || self == date
    }

    func isLaterThanOrEqualDate(_ date: Date) -> Bool {
        return self > date || self == date
    }
}

extension Date {
    func dateAtStartOfDay() -> Date {
        return self.calendar.startOfDay(for: self)
    }

    func dateAtEndOfDay() -> Date {
        var components = DateComponents()
        components.day = 1
        components.second = -1
        return self.calendar.date(byAdding: components, to: self.dateAtStartOfDay())!
    }

    func dateByAddingDays(_ day: Int) -> Date {
        return self.calendar.date(byAdding: .day, value: day, to: self)!
    }

    func dateByAddingHours(_ hour: Int) -> Date {
        return self.calendar.date(byAdding: .hour, value: hour, to: self)!
    }

    func dateByAddingMinutes(_ minute: Int) -> Date {
        return self.calendar.date(byAdding: .minute, value: minute, to: self)!
    }

    func addingMinutes(_ minute: Int) -> Date {
        return self.dateByAddingMinutes(minute)
    }
}

参考

http://stackoverflow.com/questions/13324633/nsdate-beginning-of-day-and-end-of-day
https://developer.apple.com/reference/foundation/calendar
http://qiita.com/kouchi67/items/39341d5e78778b532536
http://qiita.com/mishimay/items/8d67b583dc6809b2baf5

0
0
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
0
0