Skip to content

Instantly share code, notes, and snippets.

@justinmfischer
Last active October 6, 2021 13:22
Show Gist options
  • Select an option

  • Save justinmfischer/0a6edf711569854c2537 to your computer and use it in GitHub Desktop.

Select an option

Save justinmfischer/0a6edf711569854c2537 to your computer and use it in GitHub Desktop.
Combine date and time into a single NSDate in Swift 2.0
func combineDateWithTime(date: NSDate, time: NSDate) -> NSDate? {
let calendar = NSCalendar.currentCalendar()
let dateComponents = calendar.components([.Year, .Month, .Day], fromDate: date)
let timeComponents = calendar.components([.Hour, .Minute, .Second], fromDate: time)
let mergedComponments = NSDateComponents()
mergedComponments.year = dateComponents.year
mergedComponments.month = dateComponents.month
mergedComponments.day = dateComponents.day
mergedComponments.hour = timeComponents.hour
mergedComponments.minute = timeComponents.minute
mergedComponments.second = timeComponents.second
return calendar.dateFromComponents(mergedComponments)
}
@donniefitz2

Copy link
Copy Markdown

Thanks for posting this. It was a big help.

@mikemilla

Copy link
Copy Markdown

Thank you

@aetsyss

aetsyss commented Nov 11, 2016

Copy link
Copy Markdown

Swift 3 version

func combineDateWithTime(date: Date, time: Date) -> Date? {
    let calendar = NSCalendar.current
    
    let dateComponents = calendar.dateComponents([.year, .month, .day], from: date)
    let timeComponents = calendar.dateComponents([.hour, .minute, .second], from: time)

    var mergedComponments = DateComponents()
    mergedComponments.year = dateComponents.year!
    mergedComponments.month = dateComponents.month!
    mergedComponments.day = dateComponents.day!
    mergedComponments.hour = timeComponents.hour!
    mergedComponments.minute = timeComponents.minute!
    mergedComponments.second = timeComponents.second!
    
    return calendar.date(from: mergedComponments)
}

@abesmon

abesmon commented Sep 12, 2017

Copy link
Copy Markdown

Thanks. Save a lot of my time :) πŸ‘

@Sharkesm

Sharkesm commented Oct 8, 2017

Copy link
Copy Markdown

Searched for this piece of code for days. Thanks m8

@majeedyaseen

Copy link
Copy Markdown

Thankyou Saved my Day. :) πŸ‘

@awjenson

Copy link
Copy Markdown

Thanks! How should we create the properties for date and time?

@antonyraphel

Copy link
Copy Markdown

Worked!!! πŸ‘ πŸ’―

@Theo58

Theo58 commented Apr 23, 2019

Copy link
Copy Markdown

After multiple year it still is a very nice solution. Thanks

@sgbasaraner

Copy link
Copy Markdown

Swift 5 version, typo fixed and without force unwrapping:

func combineDateWithTime(date: Date, time: Date) -> Date? {
        let calendar = NSCalendar.current
        
        let dateComponents = calendar.dateComponents([.year, .month, .day], from: date)
        let timeComponents = calendar.dateComponents([.hour, .minute, .second], from: time)
        
        var mergedComponents = DateComponents()
        mergedComponents.year = dateComponents.year
        mergedComponents.month = dateComponents.month
        mergedComponents.day = dateComponents.day
        mergedComponents.hour = timeComponents.hour
        mergedComponents.minute = timeComponents.minute
        mergedComponents.second = timeComponents.second
        
        return calendar.date(from: mergedComponents)
    }

@JorgeZapata27

Copy link
Copy Markdown

Genius! Thanks so much, you saved so much time for all of us!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment