|
|
|
//
|
|
|
|
// Date+DateTools.swift
|
|
|
|
// DateTools
|
|
|
|
//
|
|
|
|
// Created by Grayson Webster on 8/17/16.
|
|
|
|
// Copyright © 2016 Grayson Webster. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Extends the Date class by adding convenient initializers based on components
|
|
|
|
* and format strings.
|
|
|
|
*/
|
|
|
|
|
|
|
|
public extension Date {
|
|
|
|
|
|
|
|
// MARK: - Initializers
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Init date with components.
|
|
|
|
*
|
|
|
|
* - parameter year: Year component of new date
|
|
|
|
* - parameter month: Month component of new date
|
|
|
|
* - parameter day: Day component of new date
|
|
|
|
* - parameter hour: Hour component of new date
|
|
|
|
* - parameter minute: Minute component of new date
|
|
|
|
* - parameter second: Second component of new date
|
|
|
|
*/
|
|
|
|
init(year: Int, month: Int, day: Int, hour: Int, minute: Int, second: Int) {
|
|
|
|
var dateComponents = DateComponents()
|
|
|
|
dateComponents.year = year
|
|
|
|
dateComponents.month = month
|
|
|
|
dateComponents.day = day
|
|
|
|
dateComponents.hour = hour
|
|
|
|
dateComponents.minute = minute
|
|
|
|
dateComponents.second = second
|
|
|
|
|
|
|
|
guard let date = Calendar.current.date(from: dateComponents) else {
|
|
|
|
self = Date()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
self = date
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Init date with components. Hour, minutes, and seconds set to zero.
|
|
|
|
*
|
|
|
|
* - parameter year: Year component of new date
|
|
|
|
* - parameter month: Month component of new date
|
|
|
|
* - parameter day: Day component of new date
|
|
|
|
*/
|
|
|
|
init(year: Int, month: Int, day: Int) {
|
|
|
|
self.init(year: year, month: month, day: day, hour: 0, minute: 0, second: 0)
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Init date from string, given a format string, according to Apple's date formatting guide, and time zone.
|
|
|
|
*
|
|
|
|
* - parameter dateString: Date in the formatting given by the format parameter
|
|
|
|
* - parameter format: Format style using Apple's date formatting guide
|
|
|
|
* - parameter timeZone: Time zone of date
|
|
|
|
*/
|
|
|
|
init(dateString: String, format: String, timeZone: TimeZone) {
|
|
|
|
let dateFormatter = DateFormatter()
|
|
|
|
dateFormatter.dateStyle = .none
|
|
|
|
dateFormatter.timeStyle = .none
|
|
|
|
dateFormatter.timeZone = timeZone
|
|
|
|
dateFormatter.dateFormat = format
|
|
|
|
|
|
|
|
guard let date = dateFormatter.date(from: dateString) else {
|
|
|
|
self = Date()
|
|
|
|
return
|
|
|
|
}
|
|
|
|
self = date
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Init date from string, given a format string, according to Apple's date formatting guide.
|
|
|
|
* Time Zone automatically selected as the current time zone.
|
|
|
|
*
|
|
|
|
* - parameter dateString: Date in the formatting given by the format parameter
|
|
|
|
* - parameter format: Format style using Apple's date formatting guide
|
|
|
|
*/
|
|
|
|
init (dateString: String, format: String) {
|
|
|
|
self.init(dateString: dateString, format: format, timeZone: TimeZone.autoupdatingCurrent)
|
|
|
|
}
|
|
|
|
}
|