指定日時のDateオブジェクを作る


SwiftDateを利用しているのですが、意外と欲しいプロパティなどが見つからなかったので、Dateを拡張してみました。
SwiftDateも利用しているので、ご注意ください。


## 昨日の日付を取得

```swift
var yesterday: Int {
   return Date(timeIntervalSinceNow: -60*60*24).day
}
```

## 明日の日付を取得

```
var tomorrow: Int {
    return Date(timeIntervalSinceNow: 60*60*24).day
}
```

## 明後日の日付を取得

```swift
var dayAfterTomorrow:Int {
    let n:TimeInterval = (60*60*24) * 2
    return Date(timeIntervalSinceNow: n).day
}
```

## 00:00:00のyesterday Dateを取得

```swift
var dateYesterday: Date? {
    let calendar = Calendar.current
    return calendar.date(byAdding: .day, value: -1, to: calendar.startOfDay(for: base))
}
```

## 00:00:00のtomorrow Dateを取得

```swift
var dateTomorrow: Date? {
    let calendar = Calendar.current
    return calendar.date(byAdding: .day, value: 1, to: calendar.startOfDay(for: base))
}
```

## 00:00:00のday after tomorrow Dateを取得

```swift
var dateDayAfterTomorrow: Date? {
    let calendar = Calendar.current
    return calendar.date(byAdding: .day, value: 2, to: calendar.startOfDay(for: base))
}
```

## 00:00:00のToday Dateを取得

```swift
var dateToday: Date? {
    let date = Date()
    return date.ex.createDate(yyyy: date.year, MM: date.month, dd: date.day, hh: 0, mm: 0, ss: 0)
}
```



## 指定日時のDateオブジェクトを生成

```swift
func createDate(yyyy:Int, MM:Int, dd:Int, hh:Int, mm:Int, ss:Int) -> Date {
    let year:String     = yyyy.description
    let month:String    = String(format:  "%02d", MM)
    let day:String      = String(format:  "%02d", dd)
    let hour:String     = String(format:  "%02d", hh)
    let minute:String   = String(format:  "%02d", mm)
    let sec:String      = String(format:  "%02d", ss)
    let str:String      = "\(year)/\(month)/\(day) \(hour):\(minute):\(sec)"
    let dateFormater    = DateFormatter()
    dateFormater.locale = Locale(identifier: "ja_JP")
    dateFormater.dateFormat = "yyyy/MM/dd HH:mm:ss"
    let date = dateFormater.date(from: str)
    return date!
}
```


利用するときは、[Targeted Extension](http://tech.vasily.jp/entry/swift_modern_extensions)を利用されると思いますが、extension部分は以下の通りです。

```swift
extension Date: ExtensionCompatible {}

extension Extension where Base == Date {
    var yesterday: Int {
        return Date(timeIntervalSinceNow: -60*60*24).day
    }
    
    var tomorrow: Int {
        return Date(timeIntervalSinceNow: 60*60*24).day
    }
    
    var dayAfterTomorrow:Int {
        let n:TimeInterval = (60*60*24) * 2
        return Date(timeIntervalSinceNow: n).day
    }
    
    /// 00:00:00のyesterday Dateを取得
    var dateYesterday: Date? {
        let calendar = Calendar.current
        return calendar.date(byAdding: .day, value: -1, to: calendar.startOfDay(for: base))
    }
    
    /// 00:00:00のtomorrow Dateを取得
    var dateTomorrow: Date? {
        let calendar = Calendar.current
        return calendar.date(byAdding: .day, value: 1, to: calendar.startOfDay(for: base))
    }
    
    /// 00:00:00のday after tomorrow Dateを取得
    var dateDayAfterTomorrow: Date? {
        let calendar = Calendar.current
        return calendar.date(byAdding: .day, value: 2, to: calendar.startOfDay(for: base))
    }
    
    /// 00:00:00のToday Dateを取得
    var dateToday: Date? {
        let date = Date()
        return date.ex.createDate(yyyy: date.year, MM: date.month, dd: date.day, hh: 0, mm: 0, ss: 0)
    }
  
    /// 指定日時のDateオブジェクトを生成
    ///
    /// - Parameters:
    ///   - yyyy: yyyyyy
    ///   - MM: MM
    ///   - dd: dd
    ///   - hh: hh
    ///   - mm: mm
    ///   - ss: ss
    /// - Returns: Date
    func createDate(yyyy:Int, MM:Int, dd:Int, hh:Int, mm:Int, ss:Int) -> Date {
        let year:String     = yyyy.description
        let month:String    = String(format:  "%02d", MM)
        let day:String      = String(format:  "%02d", dd)
        let hour:String     = String(format:  "%02d", hh)
        let minute:String   = String(format:  "%02d", mm)
        let sec:String      = String(format:  "%02d", ss)
        let str:String      = "\(year)/\(month)/\(day) \(hour):\(minute):\(sec)"
        let dateFormater    = DateFormatter()
        dateFormater.locale = Locale(identifier: "ja_JP")
        dateFormater.dateFormat = "yyyy/MM/dd HH:mm:ss"
        let date = dateFormater.date(from: str)
        return date!
    }
}
```