我正在尝试定义一个薪水规则,它将在date_to和date_from的基础上计算员工的工资但是在这些对象中。我只能得到几天。通过使用几天,我可以从他们那里得到工作。我无法在那里度过一个月。
datej = str(payslip.date_to)
datek = str(payslip.date_from)
dj = datej[-2:]
dk = datek[-2:]
working_days=dj-dk
one_daySalary=contract.wage/30
salary=working_days*one_daySalary
result = salary
我只能在固定的30天月份的基础上计算工资。
答案 0 :(得分:2)
如果导入datetime
库并将日期转换为datetime
个对象,则可以获得月份和年份。我想在你payslip.date_to
之前str(payslip.date_to)
应该是一个字符串,所以你可以使用Odoo特殊方法来做到这一点:
datej = fields.Date.from_string(payslip.date_to)
datek = fields.Date.from_string(payslip.date_from)
现在您有两个datetime
个对象,您可以使用datetime
方法获得所需内容。
>>> datej.month
1
>>> datej.year
2018
答案 1 :(得分:0)
在程序之上,import datetime
库。如果您收到的日期对象是字符串格式,请使用其方法,使用以下函数将其转换为正确的格式。
timeFormattedObject = timeObject.strftime("%Y-%m-%d %H:%M:%S")
timeFormattedObject = datetime.strptime(timeFormattedObject ,DEFAULT_SERVER_DATETIME_FORMAT)
要获取该对象的年份,请使用以下函数。
yearValue = timeFormattedObject.year
答案 2 :(得分:0)
我在payslip.name中找到了这个月。然后我简单地尝试了那个月份的工资单名称,但是在这个解决方案中我们必须强制用户不要更改工资单名称模式。我已将payslip名称更改为只读以实现此目的
datej = str(payslip.date_to)
datek = str(payslip.date_from)
dj = int(datej[-2:])
dk = int(datek[-2:])
working_days=dj - dk
month=0
if "January" in payslip.name: month= 31
if "February" in payslip.name: month= 28
if "March" in payslip.name: month= 31
if "April" in payslip.name: month= 30
if "May" in payslip.name: month= 31
if "June" in payslip.name: month= 30
if "July" in payslip.name: month= 31
if "August" in payslip.name: month= 31
if "September" in payslip.name: month= 30
if "October" in payslip.name: month= 31
if "November" in payslip.name: month= 30
if "December" in payslip.name: month= 31
one_daySalary=contract.wage/month
salary=one_daySalary*working_days
result = salary