计算工作天数的函数

时间:2017-01-20 11:26:09

标签: function

大家好我想计算两个日期之间的工作日,而不计算周日和周六,但我不知道该怎么做! 这是我使用的代码,但它不起作用

file.py
import datetime
import math
from datetime import date

from openerp.osv import osv, fields, orm
class obj_ghb(osv.osv):
    _name = 'obj.ghb'
    _description = 'objet ghb'

    def get_total_days( self, cr, uid, ids,days_tota,arg, context = {}):
        diff_day={}


        for record in self.browse(cr, uid, ids, context=context):


            s_date = datetime.datetime.strptime(record.datedebut, "%Y-%m-%d").date()

           e_date =datetime.datetime.strptime(record.datefin, "%Y-%m-%d").date()       

            diff_day[record.id] =(e_date-s_date).days

        return diff_day


    _columns = {
        'nomprojet': fields.char('Nom du projet'),
        'responsable': fields.char('Responsable GHB'),
        'client': fields.char('Client'),
        'contactclient': fields.char('Contact du client'),
        'datedebut': fields.date('Date de debut'),
        'datefin': fields.date('Date de fin'),
        'nombredejour': fields.function(get_total_days, type = "integer", method=True, store = True),
        'obj_ghb_parent': fields.one2many('loyer', 'loyer_obj_ghb'),
        'obj_ghb_id': fields.one2many('assurance', 'assurance_obj_ghb'),
        'obj_ghb_parenttt': fields.one2many('salaire', 'salaire_obj_ghb'),
        'obj_ghb_parentttt': fields.one2many('autres', 'autres_obj_ghb'),

1 个答案:

答案 0 :(得分:0)

我想你的代码是在python中。我不能使用python,所以我不知道你的代码中是否有代码错误,但乍一看你做错了。

e_date - s_date + 1

你写道,你不想计算周末的日子,你的日子差异也许是错误的。
假设您想要计算2017年1月的星期一到星期五的天数。 星期一是2.1。星期五是6.1。如果你进行diff_day计算 e_date - s_date = 6. - 2. = 4这显然是错误的,因为它的5天 因此,您的天数将为{{1}}。

接下来你需要在你的时间范围内减去星期六和星期日的数量+你可能还想排除一些公众假期等或其他非工作日。

查看此问题的答案:Calculate the number of business days between two dates?

它应该引导你走向正确的道路。