首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在两个日期之间快速获取30分钟时隙数组

如何在两个日期之间快速获取30分钟时隙数组
EN

Stack Overflow用户
提问于 2018-05-29 09:02:14
回答 2查看 4.1K关注 0票数 2

例如:

代码语言:javascript
运行
复制
startDate:- 20-08-2018 10:00 AM

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

输出:“上午10:00”、“上午10:30”、"11:00“、"11:30”、“12:00”、"12:30“、"01:00”、"01:30“、"02:00 PM”、"02:30 PM“

代码语言:javascript
运行
复制
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("************************************")
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-29 09:12:09

你能做到的

代码语言:javascript
运行
复制
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)

上面的输出是,

代码语言:javascript
运行
复制
["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"]
票数 8
EN

Stack Overflow用户

发布于 2019-12-25 12:30:26

在两次约会之间有30分钟的时间。

代码语言:javascript
运行
复制
 override 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)
             }
     }

输出是:

代码语言:javascript
运行
复制
["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"]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50580344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档