Skip to content

chrisamanse/iOS-NSDate-Utilities

Repository files navigation

iOS - NSDate Utilities

Powerful extensions for NSDate in Swift.

Installation

Import only what you need:

  • NSDate+Main.swift - required
  • NSDate+Comparable.swift
  • NSDate+Periods.swift
  • NSDate+Periods.swift

Usage

NSTimeInterval extension:

var seconds = 2.seconds // 2 (as NSTimeInterval)
seconds = 3.minutes // 3*60 = 180
seconds = 1.hours // 1*60*60 = 3600
seconds = 1.days // 1*60*60*24 = 86400
seconds = 1.weeks // 1*60*60*24*7 = 604800

let minutesIn3600Seconds = 3600.preciseCount(.Minute) // 60.0 (as Double - since there is exactly 60 minutes in 3600 seconds)
let minutes = 30.preciseCount(.Minute) // 0.5 (Half a minute)
let hoursInWeek = 1.week.preciseCount(.Hour) // 168.0 (24 hours * 7 days)

// You can use the rest of the NSDateUnit values to count the desired unit

NSDate+Main.swift:

NSDate Creation

NSDate().calendar // Shortcut for NSCalendar.currentCalendar() - used in the extensions
NSDate.dateWithYear(2015, month: 6, andDay: 28) // Creates date of June 28, 2015 at 12 AM
NSDate.dateWithYear(2015, month: 1, day: 1, hour: 14, minute: 5, andSecond: 30) // Creates date of January 1, 2015 at 2:05:30 PM

NSDate.today() // Today same time
NSDate.tomorrow() // Tomorrow same time
NSDate.yeasterday() // Yesterday same time

NSDate.dateFromString(dateString: "03-30-2015", withFormat: "MM-dd-yyyy") // March 30, 2015 12AM

let components = NSDateComponents()
components.year = 2015
components.month = 3
components.day = 30

NSDate.dateFromComponents(components) // March 30, 2015 12AM

Components and Conversion

NSDate.dateWithYear(2015, month: 11, andDay: 23).toStringWithFormat("MM-dd-yyyy") // "11-23-2015"

let christmas = NSDate.dateWithYear(2015, month: 12, andDay: 25)
christmas.getComponents(NSCalendarUnit.CalendarUnitDay).day // 25
christmas.year // 2015
christmas.month // 12
christmas.day // 25
christmas.hour // 0 - since it's 12:00:00 AM
christmas.minute // 0
christmas.second // 0

Check relative date

NSDate().isToday == true
NSDate.tomorrow().isTomorrow == true
NSDate.yesterday().isYesterday == true

NSDate().isWeekend // Check if date is a weekend
NSDate().isWeekday

NSDate+Comparable.swift:

Compare dates using operators.

let today = NSDate()
today < NSDate.tomorrow() // True
today > NSDate.yesterday() // True
today == today // True
today != NSDate.tomorrow()

NSDate+Periods.swift:

Get start, end, next, or previous of a unit (Year, Month, Day, Week, Hour, Minute, Second) of a date.

let date = NSDate.dateWithYear(2015, month: 10, day: 20, hour: 8, minute: 40, second: 9) // Oct 20, 2015 8:40:09 AM
date.startOf(.Day) // Oct 20, 2015 at 12 AM
date.startOf(.Month) // Oct 1, 2015, 12 AM
date.startOf(.Year) // Jan 1, 2015, 12 AM
// You can also use .Second, .Minute, .Hour, and .Week

date.endOf(.Day) // Oct 20, 2015 at 11:59:59 PM
date.endOf(.Month) // Oct 31, 2015, 11:59:59 PM
date.endOf(.Year) // Dec 31, 2015, 11:59:59 PM
// You can also use .Second, .Minute, .Hour, and .Week

date.next(.Day) // Oct 21, 2015 at 8:40:09 AM
date.next(.Month) // Nov 20, 2015, 8:40:09 AM
date.next(.Year) // Oct 20, 2016, 8:40:09 AM
// You can also use .Second, .Minute, .Hour, and .Week

date.previous(.Day) // Oct 19, 2015 at 8:40:09 AM
date.previous(.Month) // Sept 20, 2015, 8:40:09 AM
date.previous(.Year) // Oct 20, 2014, 8:40:09 AM
// You can also use .Second, .Minute, .Hour, and .Week

NSDate+Count.swift

Count units from date to another date.

let today = NSDate()
let tomorrow = today.next(.Day)
today.count(.Day, toDate: tomorrow) // 1
today.preciseCount(.Day, toDate: tomorrow) // 1.0
today.count(.Hour, toDate: tomorrow) // 24

// Difference between count and preciseCount
let startOfDay = today.startOf(.Day)
let lunch = NSDate.dateWithYear(startOfDay.year, month: startOfMonth.month, day: startOfMonth.day, hour: 12, minute: 0, andSecond: 0)
startOfDay.count(.Day, toDate: lunch) // 0
startOfDay.preciseCount(.Day, toDate: lunch) // 0.5 (Half a day or 12 hours)
startOfDay.preciseCount(.Hour, toDate: lunch) // 12 (hours)

Count units from a larger unit based on a given date.

let daysInMonthToday = NSDate.count(.Day, inA: .Month, fromDate: NSDate.today()) // Count days in current month
let daysInYearToday = NSDate.preciseCount(.Day, inA: .Year, fromDate: NSDate.today()) // Count days in year precisely

License

Copyright (c) 2016 Joe Christopher Paul Amanse

This software is distributed under the MIT License.

About

Powerful extensions for NSDate in Swift.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages