繁体   English   中英

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

[英]Best way to find time segments in a time frame

我目前正在制作一个应用程序,我必须在其中检索某些工作时间的津贴。

例如,我从下午 3:00 工作到晚上 10:00。 在此期间,将在晚上 8:00 至晚上 10:00 之间给予 20% 的津贴,从晚上 10:00 至晚上 11:00 给予 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
}

我一直在寻找一种更好更好的方法来做到这一点,但我找不到。

有没有更好的方法,或者我是否必须使用 if 构造来使用这种方法?

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())
    }
}

所以,我们可以把这个问题分解成几个问题。

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

2) 计算总工资所需的算法

我有一个基本假设。

1)你说津贴 - 如果一个人在 2200 到 2300 年工作,他们将获得 35% 的津贴 - 我把它当作奖金,所以说是正常小时费率的 1.35%。 如果不是这种情况,那么一次消耗一个时间帧的想法将是相同的。 唯一的区别可能是 totalPay 计算。

我的算法遍历每个时间框架并确定当前时间是否截取任何时间框架。 如果是这样,我会计算它截获的数量并计算工资率。

注意:我在 SO 上编写了所有这些 - 可能存在一些语法问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM