Skip to content

Instantly share code, notes, and snippets.

@machl
Created March 17, 2016 21:48
Show Gist options
  • Save machl/6771239130ec511c521c to your computer and use it in GitHub Desktop.
Save machl/6771239130ec511c521c to your computer and use it in GitHub Desktop.
No more pain with ugly NSDate code.
//
// Time.swift
// Playground
//
// Created by Lukas Machalik on 17/03/15.
// Copyright © 2015 Beers&Chill LLC. All rights reserved.
//
// Examples:
// let duration = 100.milliseconds
// let tomorrow = (Time.now + 24.hours).asDate
// let tomorrow2 = NSDate() + 24.hours
// let today = Time.now.asDate
// let yesterday = 24.hours.ago
//
// var now = NSDate()
// now += 12.hours
import Foundation
typealias Time = Double
extension Time {
var years: Time {
return self * 365.days
}
var year: Time { return years }
var days: Time {
return self * 24.hours
}
var day: Time { return days }
var hours: Time {
return self * 60.minutes
}
var hour: Time { return hours }
var minutes: Time {
return self * 60.seconds
}
var minute: Time { return minutes }
var seconds: Time {
return self
}
var second: Time { return seconds }
var milliseconds: Time {
return self * 0.001
}
var millisecond: Time { return milliseconds }
var ago: NSDate {
return NSDate() - self
}
var asDate: NSDate {
return NSDate(withTime: self)
}
static var minTime: Time {
return NSDate.minTime
}
static var now: Time {
return NSDate().asTime
}
}
extension NSDate {
var asTime: Time {
return Time(timeIntervalSince1970)
}
class var minTime: Time {
return distantPast().asTime
}
class var maxTime: Time {
return distantFuture().asTime
}
convenience init(withTime time: Time) {
self.init(timeIntervalSince1970: time)
}
}
func +(left: NSDate, right: Time) -> NSDate {
return left.dateByAddingTimeInterval(NSTimeInterval(right))
}
func -(left: NSDate, right: Time) -> NSDate {
return left.dateByAddingTimeInterval(NSTimeInterval(-right))
}
func += (inout left: NSDate, right: Time) {
left = left + right
}
func -= (inout left: NSDate, right: Time) {
left = left - right
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment