如何在 swift 中将分钟添加到当前时间

问题描述 投票:0回答:12

我是 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*
ios swift date
12个回答
349
投票

两种方法:

  1. 使用

    Calendar
    date(byAdding:to:wrappingComponents:)
    。例如,在 Swift 3 及更高版本中:

    let calendar = Calendar.current
    let date = calendar.date(byAdding: .minute, value: 5, to: startDate)
    
  2. 只需使用

    +
    运算符(参见
    +(_:_:)
    )即可添加
    TimeInterval
    (即一定秒数)。例如。要增加五分钟,您可以:

    let date = startDate + 5 * 60
    

    (注意,这里的顺序是具体的:日期在

    +
    左侧,秒数在右侧。)

    如果您愿意,也可以使用

    addingTimeInterval

    let date = startDate.addingTimeInterval(5 * 60)
    

底线,

+
/
addingTimeInterval
对于简单场景来说是最简单的,但如果您想添加更大的单位(例如天、月等),您可能需要使用日历计算,因为这些计算会根据夏令时,而
addingTimeInterval
没有。


对于 Swift 2 的演绎,请参阅 此答案的先前修订版


56
投票

您可以使用日历的方法

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

将任何

Calendar.Component
添加到任何
Date
。您可以创建一个日期扩展来为您的
UIDatePicker
的日期添加 x 分钟:

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"

33
投票

斯威夫特4

// 向日期添加 5 分钟

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

// 从日期中减去 5 分钟

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

斯威夫特 5.1:

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

10
投票
extension Date {
    func withAddedMinutes(minutes: Double) -> Date {
         addingTimeInterval(minutes * 60)
    }

    func withAddedHours(hours: Double) -> Date {
         withAddedMinutes(minutes: hours * 60)
    }
}

用例

let anHourFromNow = Date().withAddedHours(hours: 1)
let aMinuteFromNow = Date().withAddedMinutes(minutes: 1)

6
投票

您可以在 swift 4 或 5 中使用

    let date = Date()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd H:mm:ss"
    let current_date_time = dateFormatter.string(from: date)
    print("before add time-->",current_date_time)

    //adding 5 miniuts
    let addminutes = date.addingTimeInterval(5*60)
    dateFormatter.dateFormat = "yyyy-MM-dd H:mm:ss"
    let after_add_time = dateFormatter.string(from: addminutes)
    print("after add time-->",after_add_time)

输出:

before add time--> 2020-02-18 10:38:15
after add time--> 2020-02-18 10:43:15

5
投票

保存这个小扩展:

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)

4
投票

您可以使用

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


4
投票

NSDate.init
timeIntervalSinceNow
:
例如:

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

3
投票

斯威夫特 3:

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

3
投票

我认为最简单的是

let minutes = Date(timeIntervalSinceNow:(minutes * 60.0))

0
投票

如果你想要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

0
投票

在大多数情况下,我们可以使用以下简单的扩展来代替使用日历:

public extension TimeInterval {
    init(days: Int = 0, hrs: Int = 0, mins: Int = 0, sec: Int) {
        let timeInSec = (sec) + (mins * 60) + (hrs * 60 * 60) + (days * 24 * 60 * 60)
        self.init(timeInSec)
    }
}

我们可以这样做:

Date.now.addingTimeInterval( -TimeInterval(mins: 5, sec: 0) ) //Now - 5 mins

Date.now.addingTimeInterval( TimeInterval(mins: 5, sec: 0) ) //Now + 5 mins

Date.now.addingTimeInterval( -.init(days: 5, sec: 0) ) //Now - 5 days
© www.soinside.com 2019 - 2024. All rights reserved.