Рассчитать оставшиеся дни до конкретной даты в Odoo 8

Я хочу рассчитать оставшиеся дни до определенной даты, которая должна быть введена в той же форме просмотра.

class saisir_soumission(osv.osv):
    _name='saisir.soumission' 

    def compa_date(self,cr,uid,ids,args,fields,context=None):       
        r = {}
        date_format = '%d-%m-%Y'
        joining_date = 'Date_ouv_pli'
        current_date = (datetime.today()).strftime(date_format)
        d1 = datetime.strptime(joining_date, date_format).date()
        d2 = datetime.strptime(current_date, date_format).date()
        r = str((d2-d1).days + 1)   
        return r

   _columns = {
       'NumOffre' : fields.char('N° Offre'),
       'organisme_s' : fields.char('Organisme'),
       'caution' : fields.float('Caution'),
       'Date_ouv_pli' : fields.date('Date Ouverture Plis'), #field to be entered 
       'observation_d' : fields.text('Observation'),
       'compar' : fields.function(compa_date,string='Jours Restants'),
      }

3 ответа

Решение

Вы можете использовать встроенный объект dateime, timedelta

>>> import datetime
>>> diff = d1 - datetime.date.today()
>>> diff.days

Ниже я публикую общее решение для вашей справки

        from dateutil import relativedelta
        from datetime import  datetime
        datetime_fomat = '%Y-%m-%d %H:%M:%S'
        end="any  future date in string"##########
        current =datetime.now().replace(microsecond=0)
        end = datetime.strptime(str(end), datetime_fomat)
        diff = relativedelta.relativedelta(end, current)

        day=diff.days >=1 and diff.days or 0
        hour=diff.hours >=1 and diff.hours or 0
        minute=diff.minutes>=1 and diff.minutes or 0
        second=diff.seconds>=1 and diff.seconds or 0
        print "{day}days:{hour}hours:{minute}minutes: {second}seconds".format(day=day,hour=hour,minute=minute,second=second)

Надеюсь, это поможет вам.

Вот это решение

class saisir_soumission(osv.osv):
    _name='saisir.soumission' 

    def compa_date(self,cr,uid,ids,args,fields,context=None):       
        r = {}
        date_format = "%Y-%m-%d %H:%M:%S"
        joining_date = 'Date_ouv_pli'
        current_date = fields.datetime.now()
        d1 = datetime.strptime(joining_date, date_format)
        d2 = datetime.strptime(current_date, date_format)
        days = (d2 - d1).days   
        return days

   _columns = {
       'NumOffre' : fields.char('N° Offre'),
       'organisme_s' : fields.char('Organisme'),
       'caution' : fields.float('Caution'),
       'Date_ouv_pli' : fields.date('Date Ouverture Plis'), #field to be entered 
       'observation_d' : fields.text('Observation'),
       'compar' : fields.function(compa_date,string='Jours Restants'),
 
      }

Другие вопросы по тегам