Подтвердить что ты не робот

Как добавить минут к текущему времени в быстром

Я новичок в Swift и пробовал планировщик. У меня есть время начала, и мне нужно добавить 5 минут (или кратность) к началу и отобразить его в UILabel?

    @IBAction func timePickerClicked(sender: UIDatePicker) {
    var dateFormatter = NSDateFormatter()
    dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
    var dateStr = dateFormatter.stringFromDate(startTime.date)
    let sttime = dateStr
    startTimeDisplay.text = dateStr
    }

   // How to advance time by 5 minutes for each section based on the   start time selected and display time 
   // section 1 = start time + 5
   // section 2 = start time + 10*
4b9b3361

Ответ 1

Два подхода:

  1. Использовать календарь:

    В Swift 3 и более поздних версиях:

    let calendar = Calendar.current
    let date = calendar.date(byAdding: .minute, value: 5, to: startDate)
    

    Или в Swift 2:

    let calendar = NSCalendar.currentCalendar()
    let date = calendar.dateByAddingUnit(.Minute, value: 5, toDate: startDate, options: [])
    
  2. Просто используйте dateByAddingTimeInterval, чтобы добавить определенное количество секунд.

    Например,

    Swift 3 или более поздняя версия:

    let date = startDate.addingTimeInterval(5.0 * 60.0)
    

    Swift 2:

    let date = startDate.dateByAddingTimeInterval(5.0 * 60.0)
    

В итоге, addingTimeInterval является самым простым, но если вы когда-нибудь добавите дни, месяцы и т.д., Вы захотите использовать календарные расчеты, потому что они учитывают переход на летнее время, а dateByAddingTimeInterval - нет.

Ответ 2

Вы можете использовать метод календаря

func date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = default) -> Date?

добавить любой Calendar.Component к любому Date. Вы можете создать расширение даты, чтобы добавить x минут к дате UIDatePicker:

Xcode 8 и Xcode 9 • Swift 3.0 и Swift 4.0

extension Date {
    func adding(minutes: Int) -> Date {
        return Calendar.current.date(byAdding: .minute, value: minutes, to: self)!
    }
}

Затем вы можете просто использовать метод расширения, чтобы добавить минуты отправителю (UIDatePicker):

let section1 = sender.date.adding(minutes: 5)
let section2 = sender.date.adding(minutes: 10)

Тестирование игровой площадки:

Date().adding(minutes: 10)  //  "Jun 14, 2016, 5:31 PM"

Ответ 3

Swift 4:

//добавляем 5 минут к дате

let date = startDate.addingTimeInterval(TimeInterval(5.0 * 60.0))

//вычитаем 5 минут от даты

let date = startDate.addingTimeInterval(TimeInterval(-5.0 * 60.0))

Swift 5.1:

// subtract 5 minutes from date
transportationFromDate.addTimeInterval(TimeInterval(-5.0 * 60.0))

Ответ 4

Сохраните это небольшое расширение:

extension Int {

 var seconds: Int {
    return self
 }

 var minutes: Int {
    return self.seconds * 60
 }

 var hours: Int {
    return self.minutes * 60
 }

 var days: Int {
    return self.hours * 24
 }

 var weeks: Int {
    return self.days * 7
 }

 var months: Int {
    return self.weeks * 4
 }

 var years: Int {
    return self.months * 12
 }
}

Затем используйте его интуитивно, как:

let threeDaysLater = TimeInterval(3.days)
date.addingTimeInterval(threeDaysLater)

Ответ 5

Вы можете выполнить арифметику даты с помощью NSDateComponents. Например:

import Foundation

let comps = NSDateComponents()

comps.minute = 5

let cal = NSCalendar.currentCalendar()

let r = cal.dateByAddingComponents(comps, toDate: NSDate(), options: nil)

Это то, что вы видите, когда пытаетесь на игровой площадке.

enter image description here

Ответ 6

NSDate.init с помощью timeIntervalSinceNow:
Пример:

 let dateAfterMin = NSDate.init(timeIntervalSinceNow: (minutes * 60.0))

Ответ 7

Swift 3:

let minutes: TimeInterval = 1 * 60
let nowPlusOne = Date() + minutes

Ответ 8

Если вам нужна метка времени Unix

        let now : Date = Date()
        let currentCalendar : NSCalendar = Calendar.current as NSCalendar

        let nowPlusAddTime : Date = currentCalendar.date(byAdding: .second, value: accessTime, to: now, options: .matchNextTime)!

        let unixTime = nowPlusAddTime.timeIntervalSince1970