【问题标题】:How to get 30 minutes time slots array in between two dates swift如何在两个日期之间快速获得 30 分钟的时隙数组
【发布时间】:2018-11-07 20:56:02
【问题描述】:

例如:

startDate:- 20-08-2018 10:00 AM

endDate:- 20-08-2018 02:30 PM

输出:[“10:00 AM”,“10:30 AM”,“11:00 AM”,“11:30 AM”,“12:00 PM”, “12:30 PM”、“01:00 PM”、“01:30 PM”、“02:00 PM”、“02:30 PM”]

var fromTime:Date = getFromTime
fromTime = fromTime.addingTimeInterval(-1800)

guard let toTime:Date  = timeFormat.date(from:endTime) else {
    return nil
}

var dateByAddingThirtyMinute : Date!
let timeinterval : TimeInterval = toTime.timeIntervalSince(fromTime)
let numberOfIntervals : Double = timeinterval / 3600;

var timeArrayAM = [String]()
var timeArrayPM = [String]()

for _ in stride(from: 0, to: Int(numberOfIntervals * 2), by: 1) {

    dateByAddingThirtyMinute = fromTime.addingTimeInterval(1800)
    fromTime = dateByAddingThirtyMinute

    if let dateString = dateByAddingThirtyMinute.format(with: "hh:mm a") as? String {

        // print("Time after 30 min = \(dateString)")

        if temp == 0 {

            let time = dateString
            guard let getStopTime = timeFormat.date(from: time) else {

                return nil
            }

            var stopTime = getStopTime

            var date = Date()
            date = date.addingTimeInterval(TimeInterval(advanceTimeInterval*60))
            let calendar = Calendar.current

            let year = calendar.component(.year, from: date)
            let month = calendar.component(.month, from: date)
            let day = calendar.component(.day, from: date)
            let hour = calendar.component(.hour, from: stopTime)
            let minute = calendar.component(.minute, from: stopTime)

            stopTime = calendar.date(bySetting: .year, value: year, of: stopTime)!
            stopTime = calendar.date(bySetting: .month, value: month, of: stopTime)!
            stopTime = calendar.date(bySetting: .day, value: day, of: stopTime)!
            stopTime = calendar.date(bySetting: .hour, value: hour, of: stopTime)!
            stopTime = calendar.date(bySetting: .minute, value: minute, of: stopTime)!

            let timeDifference = calendar.dateComponents([.hour, .minute], from: stopTime, to: date)

            // print_debug("************************************")
            // print(timeDifference.hour, timeDifference.minute)
            if timeDifference.hour! < 0 || timeDifference.minute! < 0 || (timeDifference.hour! == 0 && timeDifference.minute! == 0 ) {
                showFirstTime = dateString
                temp = 1
            }
            // print_debug("************************************")
        }

【问题讨论】:

  • 在开始和结束之间或每 30 分钟循环一次并将其添加到列表中...您为什么不自己努力并尝试编写这样的代码。如果您的代码有问题,请将其带回此处并显示给我们
  • 始终显示您目前获得的代码。
  • @musefan 在这里我把问题简单化了,在这里我给你两个日期,在我的情况下,我有两次“10:00 AM”“02:30 PM”,所以在这个情况下,获取时隙数组变得如此困难。
  • @VipulKumar:好的,现在告诉我们你的代码有什么问题?有用吗?
  • 正如我所说的那样,我想知道你们是否有更好的方法来做到这一点。

标签: ios swift date time


【解决方案1】:

你可以这样做,

var array: [String] = []

let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy hh:mm a"

let formatter2 = DateFormatter()
formatter2.dateFormat = "hh:mm a"

let startDate = "20-08-2018 10:00 AM"
let endDate = "20-08-2018 02:30 PM"

let date1 = formatter.date(from: startDate)
let date2 = formatter.date(from: endDate)

var i = 1
while true {
    let date = date1?.addingTimeInterval(TimeInterval(i*30*60))
    let string = formatter2.string(from: date!)

    if date! >= date2! {
        break;
    }

    i += 1
    array.append(string)
}
print(array)

上面的输出是,

["10:30 AM", "11:00 AM", "11:30 AM", "12:00 PM", "12:30 PM", "01:00 PM", "01:30 PM", "02:00 PM", "02:30 PM"]

【讨论】:

  • 这是对的,但也可能存在日期不是 30 分钟的精确倍数的情况,因此请像这样进行检查:-
  • 如果日期 >= endTime { break; }
  • @DilipTiwari,10 分钟内只需在 TimeInterval 下将 30 替换为 10,即 (i*10*60)。
  • @DilipTiwari,请为此生成一个单独的问题,并提供更多详细信息。
  • 我想创建像 [09:00 - 09:30, 09:15 - 09:45, 09:30 - 10:30] 这样的时间段。 30 分钟时段和 15 分钟间隙。
【解决方案2】:

获取两个日期之间的 30 分钟时隙。

覆盖 func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.
        setTimeArray()
    }
func setTimeArray(){
        var array: [String] = []
        let formatter = DateFormatter()
        formatter.dateFormat = "dd-MM-yyyy HH:mm"
        let formatter2 = DateFormatter()
        formatter2.dateFormat = "hh:mm a"
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd-MM-yyyy"
        let dt = Date()
        let nxtDt = dt.getNextDate()
        let Curdate = dt.DateToString(Formatter: "dd-MM-yyyy")
        let Nxtdate = nxtDt.DateToString(Formatter: "dd-MM-yyyy")
        let startDate = "\(Curdate) 10:00"
        let endDate = "\(Nxtdate) 00:00"

        let date1 = formatter.date(from: startDate)
        let date2 = formatter.date(from: endDate)
        let interval = 30
        let string = formatter2.string(from: date1!)
        array.append(string)
        var i = 1
        while true {
            let date = date1?.addingTimeInterval(TimeInterval(i*interval!*60))
            let string = formatter2.string(from: date!)

            if date! >= date2! {
                break;
            }

            i += 1
            array.append(string)
        }
    }

输出为:

["10:00 AM", "10:30 AM", "11:00 AM", "11:30 AM", "12:00 PM", "12:30 PM", "01:00 PM", "01:30 PM", "02:00 PM", "02:30 PM", "03:00 PM", "03:30 PM", "04:00 PM", "04:30 PM", "05:00 PM", "05:30 PM", "06:00 PM", "06:30 PM", "07:00 PM", "07:30 PM", "08:00 PM", "08:30 PM", "09:00 PM", "09:30 PM", "10:00 PM", "10:30 PM", "11:00 PM", "11:30 PM"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多