如何计算工作日数?嗨社区
我需要您的帮助,并再次提出建议。作为新用户,我正在努力学习。
我有一个包含开始日期和结束日期的数据表。我想计算开始日期和结束日期之间的工作日数?如何在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功能
希望这可以帮助,
杰瑞
回复:如何计算工作日数?嗨,杰里
这真的很有帮助。我列出了自己的清单,现在清单上显示了我想要的清单。
谢谢
马丁