日期逻辑的一个简单案例。计算间隔

A simple case of date logic. Calculate intervals

我在想出计算准确值的正确方法时遇到问题。这就是问题所在。我有一个资源可以每周、每天和每小时定价。

假设每小时 5 英镑,每天 20 英镑,每周 150 英镑。

我想做的是计算预订资源的成本,这样如果有人预订了 1 周、3 天和 2 小时,他们最终应该只支付 150 + 60 + 10 = 220

我正在使用 JodaTime 作为参考。这是我目前所拥有的:

hour_price = resource.getPricing().getHourly() * ((mDuration.toStandardSeconds().getSeconds() % 86400) % 24);
day_price = resource.getPricing().getDaily() * (mDuration.toStandardDays().getDays() % 7);
week_price = resource.getPricing().getWeekly() * (Math.floor(mDuration.toStandardDays().getDays() / 7));
double cost = week_price + day_price + hour_price;

我认为周逻辑和日逻辑是合理的。现在我只需要剩余时间的逻辑。有什么指点吗?

你应该从最大的间隔开始,从持续时间中取出它,然后从较小的开始,取出剩余的秒数并将它用于最小间隔:

week_price = resource.getPricing().getWeekly() * (mDuration.toStandardDays().getDays() / 7);
day_price =  resource.getPricing().getDaily() * (mDuration.toStandardDays().getDays() % 7);
hour_price = resource.getPricing().getHourly() * ((mDuration.toStandardSeconds().getSeconds() % 86400) / 3600);

因此,在最后一步中,您计算​​了数周和数天后剩余的小时数(除以一天中的秒数 - 24 小时内的秒数后的余数),然后将其除以秒数每小时得到多少小时。如果你还剩几秒钟,那么再增加一个小时到 hour_price,因为它开始了新的一小时。