如何使用openerp中的onchange函数计算两个日期之间的天数?

时间:2014-01-31 10:05:31

标签: openerp-7

我在payslip屏幕上创建了一个名为caldays的自定义字段,在此字段中,我希望在openerp中使用onchange函数获取from_dateto_date之间的天数,请帮我处理代码 我得到了以下代码,但我怎么能把它onchange function

datej = str(payslip.date_to)

datek = str(payslip.date_from)

dj = datej[-2:]

x=0

new = 0

while (x<=31):

x= x+1

if str(x) == dj or "0"+str(x) == dj:

new= x

dk = datek[-2:]

y=0

old = 0

while (y<=31):

y= y+1

if str(y) == dk or "0"+str(y) == dk:

old= y

caldays = new-old + 1

result = caldays

1 个答案:

答案 0 :(得分:1)

试试这个,这样就不会。有几天,你必须给出两个论点,即 date_from和date_to。不要忘记导入(导入日期时间和导入数学) 你可以将你的字段放在xml,

<field name="date_from"  on_change="get_number_of_days(date_from,date_to)"/>
<field name="date_to"  on_change="get_number_of_days(date_from,date_to)"/>
<field name="number_of_days_temp"/>

和你的py文件,

def get_number_of_days(self, date_from, date_to):
    """Returns a float equals to the timedelta between two dates given as string."""
    if (date_to and date_from) and (date_from <= date_to):
        DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
        from_dt = datetime.datetime.strptime(date_from, DATETIME_FORMAT)
        to_dt = datetime.datetime.strptime(date_to, DATETIME_FORMAT)
        timedelta = to_dt - from_dt
        diff_day = timedelta.days + float(timedelta.seconds) / 86400
        result['value']['number_of_days_temp'] = round(math.floor(diff_day))+1
    else:
        result['value']['number_of_days_temp'] = 0

    return result

希望这会对你有所帮助。