根據需求不同,一般工齡計算會有兩種方案,一種是直接以天數表示,一種是以年月日的格式表示。兩種情況的計算的方式不同,所以整理記錄一下。
1、以天數的表示方式
思路:直接用兩個日期相減,得到天數即可
1from datetime import
datetime23
4def
cal_working_age():
5 current_date =datetime.now().date()
6 begin_date = datetime.strptime("
2010-01-01
", "
%y-%m-%d
").date()78
return (current_date -begin_date).days910
if__name__ == "
__main__":
11print(cal_working_age())
2、以年月日的格式來表示
思路:以年減年,月減月,日減日,不夠則向前借。比如月不夠減,則向年借12個月,所以這時年要再減一,以此類推。
1from datetime import
datetime23
4def
cal_working_age_format(begin_date_str):
5 current_date =datetime.now().date()
6 begin_date = datetime.strptime(begin_date_str, "
%y-%m-%d
").date()
7 begin_year =int(begin_date.year)
8 begin_month =int(begin_date.month)
9 begin_day =int(begin_date.day)
1011 delta_year = current_date.year -begin_year
1213 delta_month = current_date.month -begin_month
14if delta_month <0:
15 delta_year -= 1
16 delta_month = 12 +delta_month
1718 delta_day = current_date.day -begin_day
19if delta_day >=0:
20pass
21else
:22 delta_month-=1
23 last_month_days = (datetime.datetime(year=current_date.year, month=current_date.month, day=1)-datetime.timedelta(days=1)).day
24 delta_day = last_month_days +delta_day
2526 work_age = "
{}年{}月{}日
".format(delta_year, delta_month, delta_day)
2728
return
work_age
2930
if__name__ == "
__main__":
31 begin_date = "
2010-01-01"32
print(cal_working_age_format(begin_date))
3、同樣是以年月日的格式來表示,還有另一種計算方法:
思路:先計算兩個日期的月數差,用這個月數差除以12來算到年,餘數為月,然後用當前時間-(開始時間+月數差)得到天數
1import
datetime
2import
calendar34
#獲取兩個日期的月數差56
7def
get_months(begin_date, end_date):
8return int(12 * (end_date.year - begin_date.year) +
9 (end_date.month - begin_date.month) + (end_date.day - begin_date.day) / 30)
1011
#給日期加月份
1213
14def
add_months(source_date, months):
15 month = source_date.month - 1 +months
16 year = int(source_date.year + month / 12)
17 month = month % 12 + 1
18 day = min(source_date.day, calendar.monthrange(year, month)[1])
19return
datetime.date(year, month, day)
2021
22if
__name__ == "
__main__":
23 today =datetime.datetime.now().date()
24 group_time = datetime.datetime.strptime("
2013-10-14
", "
%y-%m-%d
").date()
2526 delta_months =get_months(group_time, today)
27 year = int(delta_months / 12)
28 month = int(delta_months % 12)
29 days = (today -add_months(group_time, delta_months)).days
3031
print("
{}年{}月{}日
".format(year, month, days))
todo:以後遇到其他工齡計算的方式,再更新。
posgresql 計算工齡工資
每家企業的工齡工資演算法不同,所有根據各自的演算法自行修改,需求 1.工齡基數可設定修改,假設為每年漲200 2.當月的1號到30號,滿一年,則次月開始算工齡工資,所以在次月的下乙個月工資發放時才有算工齡工資 假設 3月1日滿一年,則4月份開始有加工齡工資,所有5月發工資時才有發到工齡工資。3.每月...
如何使用excel計算工齡
今天一位搞財務的mm問我excel計算工齡的問題,我想了想,還真不會啊。搞測試的,寫case,報進度,統計bug一般都是用excel,還真沒弄過計算工齡日期生日之類的。她的要求是 居然不會,想了半天想到2個方案 1 用perl寫個指令碼給她 2 把資訊匯入資料庫,用select 語句查詢再把結果匯出...
如何使用excel計算工齡
今天一位搞財務的mm問我excel計算工齡的問題,我想了想,還真不會啊。搞測試的,寫case,報進度,統計bug一般都是用excel,還真沒弄過計算工齡日期生日之類的。她的要求是 居然不會,想了半天想到2個方案 1 用perl寫個指令碼給她 2 把資訊匯入資料庫,用select 語句查詢再把結果匯出...