Рассчитать оставшиеся дни до конкретной даты в 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'),
}