间隔两个日期之间的双月薪

时间:2017-05-08 16:01:39

标签: python

我试图编制一个工资计算器,告诉你病假期间你的工资是多少。在哥斯达黎加,我住的地方,工资是每两个月支付一次(每个月的15号和30号),每个病假你得到80%的工资。因此,该计划会询问您的月薪是多少,然后询问您病假的开始日期和结束日期。最后,它意味着打印出你病假期间每个发薪日所得到的报酬。这就是我到目前为止所做的:

import datetime

salario = float(input("What is your monthly salary? "))

   fecha1 = datetime.strptime(input('Start date of sick leave m/d/y: '), '%m/%d/%Y')

fecha2 = datetime.strptime(input('End date of sick leave m/d/y: '), '%m/%d/%Y')


diasinc = ((fecha2 - fecha1).days)
print ("Number of days in sick leave: ")
print (diasinc)

def daterange(fecha1, fecha2):
    for n in range(int ((fecha2 - fecha1).days)):
        yield fecha1 + timedelta(n)

for single_date in daterange(fecha1, fecha2):
    print (single_date.strftime("%Y-%m-%d")) #This prints out each individual day between those dates.

我知道工资我只是乘以.8得到80%但是如何让程序在每个工资日打印出来?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是大约八年前类似问题的旧答案:python count days ignoring weekends ......

...阅读Python: datetime模块并调整Dave Webb的生成器表达式,以便在每次日期为15或30时进行计数。这是计算任何月份number of occurrences of Friday on the 13th的另一个例子。

有一些更方便的方法可以使用模运算来简化此计算。但它们无关紧要,除非您一次在低功率硬件上处理数百万个这样的数据,并且每个月的数据范围跨越几个月。在某个地方甚至可能有一个模块可以为您更有效地完成这类工作。但是你可能很难验证(测试正确性)以及难以找到。

请注意,从长远来看可能更好的一种方法是使用Python: SQLite3,它应该包含在Python发行版的标准库中。使用它来生成一个广泛范围内的所有日期的参考表(从您的组织成立到现在的一个世纪)。您可以向该表添加一列以记录所有发薪日,并使用SQL查询该表并选择日期WHERE payday == True AND date BETWEEN .... etc。

有一个如何SQLite: Get all dates between dates的例子。

这种方法将一些次要的编码工作和一些存储空间投入到参考表中,可以在可预见的将来有效地使用。