Re: [算表] 如何計算員工的年資... --日期,DATEDIF

看板Office作者 (David)時間17年前 (2008/11/27 00:47), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
不敢過謙,日期的計算,始終讓人戰戰兢兢! (如 #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)
文章代碼(AID): #19BNsXz0 (Office)
討論串 (同標題文章)
文章代碼(AID): #19BNsXz0 (Office)