Новый API в iOS 8
iOS 8 включает новый метод в NSCalendar под названием startOfDayForDate , который действительно прост в использовании:
let startOfToday = NSCalendar.currentCalendar().startOfDayForDate(NSDate())
Описание Apple:
Этот API возвращает дату первого момента данной даты.
Передайте [NSDate date], например, если вы хотите начать «сегодня».
Если было две ночи, возвращается первая. Если их не было, возвращается первый существующий момент.
Обновление относительно часовых поясов:
Поскольку startOfDayForDate является методом в NSCalendar, он использует часовой пояс NSCalendar. Поэтому, если бы я хотел узнать, сколько времени в Нью-Йорке, когда сегодня началось в Лос-Анджелесе, я мог бы сделать это:
let losAngelesCalendar = NSCalendar.currentCalendar().copy() as! NSCalendar
losAngelesCalendar.timeZone = NSTimeZone(name: "America/Los_Angeles")!
let dateTodayBeganInLosAngeles = losAngelesCalendar.startOfDayForDate(NSDate())
dateTodayBeganInLosAngeles.timeIntervalSince1970
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .ShortStyle
dateFormatter.timeZone = NSTimeZone(name: "America/New_York")!
let timeInNewYorkWhenTodayBeganInLosAngeles = dateFormatter.stringFromDate(dateTodayBeganInLosAngeles)
print(timeInNewYorkWhenTodayBeganInLosAngeles) // prints "Jul 29, 2015, 3:00 AM"