Swift 在时间范围内查找时间段的最佳方法

Swift 在时间范围内查找时间段的最佳方法,swift,time,Swift,Time,我目前正在制作一个应用程序,在这个应用程序中,我必须检索特定工作时间的津贴 例如,我从下午3:00工作到晚上10:00。 在这段时间内,8:00 pm-10:00 pm 20%和10:00 pm至11:00 pm 35%将给予补贴 到目前为止,我只做了一个相当复杂的if构造 if startUur <= 20 && eindUur >= 22 || 20..<22 ~= startUur || 20..<22 ~= eindUur || startUur

我目前正在制作一个应用程序,在这个应用程序中,我必须检索特定工作时间的津贴

例如,我从下午3:00工作到晚上10:00。 在这段时间内,8:00 pm-10:00 pm 20%和10:00 pm至11:00 pm 35%将给予补贴

到目前为止,我只做了一个相当复杂的if构造

if startUur <= 20 && eindUur >= 22 || 20..<22 ~= startUur || 20..<22 ~= eindUur || startUur > 20 && eindUur <= 22 && startMinuut > 0 || startUur < 20 {
//code to calculate allowance
}
如果startUur=22 | | 20..
struct TimeAndMoneyFrame{
var timeHourStart:Int=0
var timeHourEnd:Int=0
风险值百分比:双=0
}
延长时间和货币框架{
func timeLength()->Int{
return timehourrend-timeHourStart
}
}
假设2000到2200=时间和货币框架(时间小时开始=20,时间小时趋势=22,百分比=0.2)
让2200到2300=时间和货币框架(时间小时开始=22,时间小时趋势=23,百分比=0.35)
let timeArray:[TimeAndMoneyFrame]=[2000到2200]
//假设“startUur”表示开始时间
//假设“eindUur”意味着结束
让startUur:Int=someHour//定义某个小时
让eindure:Int=someHour//定义某个小时
让hourlyRateOfPay:Double=somePay//您定义了一些薪酬
var totalPay:Double=0
用于时间数组中的时间{
让我们开始=time.timeHourStart
让结束=time.timeHourEnd
让百分比=时间。百分比
//完全包括
如果(开始>开始和结束<结束){
totalPay+=(hourlyRateOfPay*(1+百分比)*time.timeLength())
}
//仅包含左侧-即,他们的工作时间在该时间范围内结束
否则如果(开始>开始){
让TimeWithisFrame=eIndur-start
总工资+=(小时工资*(1+百分比)*(此帧内的时间/时间。时间长度())
}
//仅包含右侧-即,在此时间范围内开始
否则如果(EINDUR
所以,我们可以把这个问题分解成几个问题

1) 定义包含具有关联百分比的时间范围的结构/类

2) 计算总薪酬所需的算法

我有一个基本假设

1) 你说津贴——一个人如果在2200-2300之间工作,可以得到35%——我把这当作奖金,比如说正常小时工资的1.35%。如果不是这样的话,一次消耗一个时间帧的想法也是一样的。唯一的区别可能是工资总额的计算

我的算法遍历每个时间帧,并确定当前时间是否截取任何时间帧。如果是的话,我计算它截获了多少,并计算工资率


注意:我对所有这些都进行了编码,因此-可能存在一些语法问题。

Erm百分比是多少?为什么10-11的比例为35%,为什么8-10的比例为20%?百分比是针对特定时间设定的。所以从20:00到22:00都是20%的附加费。可能是介于两者之间。那么19:00-23:00可能是一个涉及两个时间段的时间表?是的,19:00-23:00涉及两个时间段。
struct TimeAndMoneyFrame {
    var timeHourStart:Int = 0
    var timeHourEnd:Int = 0
    var percentage: Double = 0
}

extension TimeAndMoneyFrame {
    func timeLength() -> Int {
        return timeHourEnd - timeHourStart
    }
}

let 2000to2200 = TimeAndMoneyFrame(timeHourStart = 20, timeHourEnd = 22, percentage = 0.2)
let 2200to2300 = TimeAndMoneyFrame(timeHourStart = 22, timeHourEnd = 23, percentage = 0.35)
let timeArray:[TimeAndMoneyFrame] = [2000to2200]

//Assuming 'startUur' means startingHour
//Assuming 'eindUur' means endingHour
let startUur:Int = someHour // You define some hour
let eindUure:Int = someHour // You define some hour
let hourlyRateOfPay: Double = somePay // You define some pay
var totalPay: Double = 0

for time in timeArray {
    let start = time.timeHourStart
    let end = time.timeHourEnd
    let percent = time.percentage

    //Encompasses entirely
    if(start > startUur && end < eindUur) {
        totalPay += (hourlyRateOfPay * (1 + percent) * time.timeLength())
    }

    //Only encompassed the left side - i.e., their time worked ends within this time frame
    else if(start > startUur) {
        let timeWithinThisFrame = eindUur - start
        totalPay += (hourlyRateOfPay * (1 + percent) * (timeWithinThisFrame/time.timeLength())
    }

    //Only encompassed right side - i.e., the beginning of the starts within this time frame
    else if(eindUur < end) {
        let timeWithinThisFrame = end - startUur
        totalPay += (hourlyRateOfPay * (1 + percent) * (timeWithinThisFrame/time.timeLength())
    }
}