如何計算工作日數?嗨社區
我需要您的幫助,並再次提出建議。作為新用戶,我正在努力學習。
我有一個包含開始日期和結束日期的數據表。我想計算開始日期和結束日期之間的工作日數?如何在JMP中做到這一點的最佳方法?我的想法是添加一列並製定一個公式,例如 日期差異?但我不確定會是更好的選擇。
請參閱所附示例

謝謝
馬丁
分析工具數據表回复:如何計算工作日數?您需要做的第一件事是定義“工作日”。是每個工作日(星期一至星期五)嗎?銀行/政府假期如何?宗教假期?
回复:如何計算工作日數?也有其他問題:JMP日期始終包含一個時間,通常設置為午夜後的零秒。但是,如果範圍是從7天后的星期一中午到星期一中午,那麼您如何計算兩個半星期一?還是即使是星期一開始的午夜,都應該計算兩者?
如果範圍很小但又不是太多,則計算天數可能不是一個壞選擇(以下是經過不良測試的代碼):
// define an expression that answers the question
includeThisDate = Expr(
2/*monday*/<= Day Of Week( date ) <= 6/*friday*/
);
// brute force counting:
countSelectedDaysInRange = Function( {firstDate, lastDate, testexpr},
{date, count},
If( lastDate < firstDate,
Throw( "dates reversed" )
);
count = 0;
For( date = firstDate, date <= lastDate, date += In Days( 1 ),
count += (testexpr != 0)
);
count;
);
Show( 262 == countSelectedDaysInRange( 1jan2020, 31dec2020, Name Expr( includeThisDate ) ) );
Show( 104 == countSelectedDaysInRange( 1jan2020, 31dec2020, Expr( !(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/) ) ) );
Show( 366 == countSelectedDaysInRange( 1jan2020, 31dec2020, 1 ) );// 2020 is leap year
Show( 0 == countSelectedDaysInRange( 1jan2020, 31dec2020, 0 ) );// no days counted 262 == countSelectedDaysInRange(01Jan2020,31Dec2020,Name Expr(includeThisDate))= 1;
104 == countSelectedDaysInRange(01Jan2020,31Dec2020,Expr(!(2 <=星期幾(日期)<= 6)))= 1;
366 == countSelectedDaysInRange(01Jan2020,31Dec2020,1)= 1;
0 == countSelectedDaysInRange(01Jan2020,31Dec2020,0)= 1;
上面的代碼包括最後一天(<= lastdate而不是
從痛苦的經歷中,我知道處理日期和時間很難正確。
盡可能使用內置函數。
註釋該代碼,以供下一個維護它的人使用。
仔細測試您的代碼!
另外,如果您只需要粗略的近似值,
(1jan2021-1jan2020)/ indays(1)* 5/7 == 261.428571428571
接近262。
編輯: 日期差(1jan2020,1jan2021,“ day”)* 5/7 對於粗略的答案可能看起來更簡單
回复:如何計算工作日數?是的,工作日是每個工作日,(星期一至星期五)最好是我也可以適應當地假期
有什麼建議?
回复:如何計算工作日數?簡單的解決方案是擴展測試表達式。
// define an expression that answers the question
holidays = associativearray({1jan2020,25dec2020});
includeThisDate = Expr(
(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/)
&
!(holidays<<CONTAINS></CONTAINS>2020年的新年和聖誕節是平日,因此是260個而不是262個。您將來需要在某個時候更新關聯數組,並且可能還需要歷史數據。某些假期並非每年的同一天。多麼醜陋的問題,導致...
複雜的解決方案可能使用類似 https://www.abstractapi.com/holidays-api
(歸功於 @傑夫·珀金森對於更改日期和時間列以僅產生日期。 )
回复:如何計算工作日數?編碼工作對我來說是新手,而我似乎並沒有使其工作。但是,我試用了一些標準公式並找到了解決方案。但是使用日曆日而不是僅工作日。對於本實驗,它足夠好,並且可以進行比較。
回复:如何計算工作日數?要加一點 @Craige_Hales 和 @傑夫·珀金森關於假期等的想法,您提到了關於“當地假期”的考慮。除非您為“本地”採用一些標准定義,否則這將變得非常困難。例如,加拿大和美國一樣有“感恩節”假期。除了加拿大的日曆日與美國的日曆日不同。而且,甚至不要讓我開始在美國的城市或州一級工作。例如,在緬因州和馬薩諸塞州,愛國者節是一個假期,在美國其他任何地方都不慶祝。為了使其更具粘性,一些公司關閉了...其他一些則保持開放。包括銀行和金融機構。
回复:如何計算工作日數?我最喜歡的是北卡羅萊納州棒球假期 。
回复:如何計算工作日數?你好 @Martinej ,
我寫了一個後退插件,用於計算兩個日期列之間的工作日數。通過維護存儲在加載項目錄中的Holiday List.jmp文件,可以解決假日和要排除的任何其他特定日期。注意:此文件可以是JMP用戶的機器可訪問的任何位置中維護的任何文檔(Excel,.txt,.csv等),但是,這需要對底層JSL進行細微調整以提供文件位置。否則,我相信它可以照原樣解決您的需求。請按照說明下載,安裝和編輯假期列表文件: NETWORKDAYS功能
希望這可以幫助,
傑瑞
回复:如何計算工作日數?嗨,傑里
這真的很有幫助。我做了自己的清單,現在清單上顯示了我想要的清單。
謝謝
馬丁