Re: [算表] 如何計算員工的年資... --日期,DATEDIF
不敢過謙,日期的計算,始終讓人戰戰兢兢! (如 #17BihDJU 3720)
怪怪現象,曾懷疑是-0.5位置的影響,但因不敢確定 後來也就沒寫~ 換完位置就好了(吧)
感謝您的解釋,所以基數可以有0.5,接下來的DATEIF式就以前文最後的z式討論
(z式有兩個 但本例中結果相同,z式的不同又是另一個故事了 見文末)
不知您說差一天,能否舉個例子?
按照公式,似乎不全然是最後工作日與離職生效日定義的影響
DATE DATEIF
PART 1
2000/8/31 2003/2/28 2 5 28 5 5
2000/8/31 2003/3/1 2 6 -2 5 6
2000/8/31 2003/3/2 2 6 -1 5 6
2000/8/31 2003/3/3 2 6 0 6 6
PART2
2000/3/31 2003/9/30 3 5 30 7 7
2000/3/31 2003/10/1 3 6 0 8 8
PART3
2000/3/30 2003/9/29 3 5 30 7 7
2000/3/30 2003/9/30 3 6 0 8 8
2000/3/30 2003/10/1 3 6 1 8 8
從式子來看(date式, 已換-0.5位置)
A1加6個月減1天 是 算成半年
所以
A1加6個月 是 算成一年
如果說這樣是 定義:最後工作日
看PART3 9/29 是6個月減1天 所以要算成半年
用DATEIF(z)也一樣 因為這裡6個月減1天變成5個月 也算成半年
PART2是另一例子
這些情況下結果都相同 所以DATEIF(z)式也是 定義:最後工作日 囉(?)
不一樣的情況在PART1
DATEIF只要換月了,就是算新的一個月
PART1很清楚顯示二式不一樣 而且還差兩天
中間也避開閏年 代表此情況更為頻繁地發生
這裡最大的不同是
任何一天的"日" 減一之後必小於等於30
而除了二月以外,30日都存在於日曆上
但二月30日經由DATE計算會是三月2日或1日(閏)
二月29.30這兩天不在日曆上
DATE式會把三月2日視為上個半年 從三月3日開始才算成下半年
但DATEIF式會辨識三月1日為下半年 只在天數計算顯示出-2
-2的算法是3月1日-2月31日=3月1日-3月3日=-2 (參考 #17BihDJU 3720)
這兩天就算做白工了 當兵就算白當了!(怒!)
DATEIF符合一般計算日期的古怪習慣
在這裡也適用吧?
這是雖然DATEIF式中沒有看到"減1"
卻仍是"最後工作日"的原因(如果沒想錯的話 |||)
至於在定義"離職生效日"的系統中 要套用本文討論的公式
應只需把式中B1 改為 B1-1 這部分應該沒問題
※ 引述《mddc62 (我是大豬頭)》之銘言:
: --------------------------------------------------------------------
: 修正公式先(請先注意資料轉出的離職日定義)
: =YEAR(B1)-YEAR(A1)+
: IF(DATE(YEAR(B1),MONTH(A1),DAY(A1))<=B1,
: IF(DATE(YEAR(B1),MONTH(A1)+6,DAY(A1)-1)>=B1,0.5,1),
: IF(DATE(YEAR(B1)-1,MONTH(A1)+6,DAY(A1)-1)>=B1,-0.5,0))
: ~~~~ ~~~換位置
: 相較之下版主個函數就簡單有力得多了
呵 其實我還不一定寫得出這個式子呢
當(主管?)不了解DATEIF時 DATEIF就不一定好了(類似黑箱?!)
但不用DATEIF很難很難寫!
(就是用一大堆DATE和IF 看函數名就知道了XDD)
: 剛剛比對測試日期,跟版主的公式目前就差一天(這一天是對離職日定義不同造成)
: 不過由於2/29這個日子實在太怪了,都出現問題..
: 所以公式可能要針對2/29到/離職(結算)進行微調..
: 或者針對2/29到離職進行單獨運算
: 其餘部分並沒有在"結果"上出現版主所說的怪怪現象
: -------------------------------------------------------------------
: 檢附個人感想:
: 版主真的過謙了,
: 我常看這個版,對一個問題常會有不同的想法
: 同時讓我對以前不解的問題有豁然開朗的感覺
: 解決這個問題,先說這個概念:
: 員工退休時,只要再現職超過3.5年以上,有選勞退新制的人都有"可能"領到三筆退休金
: 一筆是新制的退休金,這個就看公司每月存多少錢到勞保局個人退休專戶,由個人再跟
: 勞保局領
: 一筆是勞保的老年給付(勞保局算的!)
: 另一筆就是底下我們討論的"舊制"退休金,由勞工退休時跟公司申請
: (部分企業資遣人員時有時會用舊制退休金算法)
: (突然想到:不過年底要請精算師算明年要不要提撥退休金也會用到,作為
: 預估明年預算用)
: 至於會不會領到及領到多少都有相關法規及承辦機構可以查詢,不代表提出就"一定"可以
: 領到
: ---------------------------------------------------------------------------
: 舊制的算法精神在於以一段時間的平均月薪當作"基數"(所以他是一個整數)
整數? 比如說月薪 54321元的意思嗎
: 再乘上一個倍數,這個倍數就是年資的概念(依目前規範可能會出現0.5是OK的!)
所以頂多出現XXXXX.5元
: 因為每家公司在設計人事系統時概念想法不一樣,尤其離職日
: 有些公司會定義:最後工作日(<-----目前我的算法都是這一個)
: 有些公司會定義:離職生效日(<-----目前版主算法都是這一個)
其實我也不清楚是用哪一個 XD
但假如 1/1 ~ 1/1 是可計算的
應當屬於最後工作日 因為離職生效日大概一定要隔天吧
至於當初第一種算法(y) 可能算是最後工作日+1個月
也就是做滿一個月 可以領薪水了 才算
修正後(z)就是往前平移一個月 (以及不用INT)
: (所以使用公式時要確認自家的資料庫日期定義)
: 依照法令的概念:就算多一天也算半年,半年多一天也算一年
: 為了便於解釋,
: 所以我才會想先將年資的年份取出,再錨定人員到職的標準半年位置進行比對
: (有時計算要解釋給主管,用過於精簡的函數或主管不熟的函數很麻煩)
: (所以/12*2,也是這個原因....習慣難改啊!)
呵 原來是這樣 我也故意寫15*12 便於了解意義~
目前前文尚無最好的算式
兩個z式各有不同的問題
z1問題
2001/7/30 2002/1/31
z2問題
2001/7/31 2002/1/30
重新檢討後 就是沒有"直譯"的關係
目前覺得最好的z式是(z3 ?)
z =ROUNDUP((DATEDIF($A2,$B2,"m")+1)/6,0)
(半年數) ^^平移一個月 一開始0個月+1 得1個月
一上班就算年資
基數(未動) =MIN(IF(z>30,z/2+15,z),45)
若過15年 半年.5基數 否則半年1基數 最多45基數
有問題請提出~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.37.36
※ 編輯: JieJuen 來自: 114.47.37.36 (11/27 01:27)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):
Office 近期熱門文章
PTT數位生活區 即時熱門文章