如何计算 Openerp 中两个日期之间的天数
How to get a count of days between two dates in Openerp
我需要计算 hr_holidays class 中任何给定两天之间的天数,并且需要忽略从该计算中给定 hr_company_holidays class 的天数.
就像在 hr_holiday class 中,此方法要求完成计算....
def _get_number_of_days(self, date_from, date_to):
diffdays = end_date-startdate+hr_comapny_holidays.dates
return diffdays
怎么做?我需要知道上述功能的其他行
"hr_company_holidays"
class hr_company_holidays(osv.osv):
_name = "hr.company.holidays"
_description = "hr.company.holidays"
_columns = {
'name': fields.char('Holiday', size=256, required=True),
'date': fields.date('Day', size=256, required=True),
}
导入datetime
模块。将日期转换为日期对象,然后减去它们。
from datetime import datetime
from openerp import tools
start_date = datetime.strptime("1995-03-13", tools.DEFAULT_SERVER_DATE_FORMAT)
end_date = datetime.strptime("1995-03-19", tools.DEFAULT_SERVER_DATE_FORMAT)
delta = d1 - d0
print(delta.days)
OpenERP/Odoo 中的日期字段为字符串格式,YYYY-MM-DD
。您的方法可以接受日期对象或字符串(您应该使用 strptime()
方法将其转换为日期对象),并且在您的方法内部,只需执行与上述类似的操作。最后,由于您有一些日期要忽略,只需测试是否 hr_holiday_start_date < hr_company_holiday_date < hr_holiday_end_date
,计算通过此日期的日期并将其减去差异。
更新:
你的方法在新 API:
中应该看起来像这样
@api.one
def _get_number_of_days(self, start_date, end_date):
# start_date and end_date are date strings in YYYY-MM-DD format
# First, get the hr_company_holidays models
hr_company_holidays_model = self.env['hr_company_holidays']
# Then, get how many holidays that are within start_date and end_date
holiday_count = hr_company_holidays.search_count([('date', '>', start_date), ('date', '<', end_date)])
# Convert start_date and end_date to date objects
start_date_obj = datetime.strptime(start_date, tools.DEFAULT_SERVER_DATE_FORMAT)
end_date_obj = datetime.strptime(end_date, tools.DEFAULT_SERVER_DATE_FORMAT)
# Get the delta object
delta = end_date_obj - start_date_obj
# Lastly, get number of days, ignoring holidays
total_days = delta.days - holiday_count
# It's up to you what to do next with this total_days
希望对您有所帮助!
我需要计算 hr_holidays class 中任何给定两天之间的天数,并且需要忽略从该计算中给定 hr_company_holidays class 的天数. 就像在 hr_holiday class 中,此方法要求完成计算....
def _get_number_of_days(self, date_from, date_to):
diffdays = end_date-startdate+hr_comapny_holidays.dates
return diffdays
怎么做?我需要知道上述功能的其他行
"hr_company_holidays"
class hr_company_holidays(osv.osv):
_name = "hr.company.holidays"
_description = "hr.company.holidays"
_columns = {
'name': fields.char('Holiday', size=256, required=True),
'date': fields.date('Day', size=256, required=True),
}
导入datetime
模块。将日期转换为日期对象,然后减去它们。
from datetime import datetime
from openerp import tools
start_date = datetime.strptime("1995-03-13", tools.DEFAULT_SERVER_DATE_FORMAT)
end_date = datetime.strptime("1995-03-19", tools.DEFAULT_SERVER_DATE_FORMAT)
delta = d1 - d0
print(delta.days)
OpenERP/Odoo 中的日期字段为字符串格式,YYYY-MM-DD
。您的方法可以接受日期对象或字符串(您应该使用 strptime()
方法将其转换为日期对象),并且在您的方法内部,只需执行与上述类似的操作。最后,由于您有一些日期要忽略,只需测试是否 hr_holiday_start_date < hr_company_holiday_date < hr_holiday_end_date
,计算通过此日期的日期并将其减去差异。
更新:
你的方法在新 API:
中应该看起来像这样 @api.one
def _get_number_of_days(self, start_date, end_date):
# start_date and end_date are date strings in YYYY-MM-DD format
# First, get the hr_company_holidays models
hr_company_holidays_model = self.env['hr_company_holidays']
# Then, get how many holidays that are within start_date and end_date
holiday_count = hr_company_holidays.search_count([('date', '>', start_date), ('date', '<', end_date)])
# Convert start_date and end_date to date objects
start_date_obj = datetime.strptime(start_date, tools.DEFAULT_SERVER_DATE_FORMAT)
end_date_obj = datetime.strptime(end_date, tools.DEFAULT_SERVER_DATE_FORMAT)
# Get the delta object
delta = end_date_obj - start_date_obj
# Lastly, get number of days, ignoring holidays
total_days = delta.days - holiday_count
# It's up to you what to do next with this total_days
希望对您有所帮助!