如何计算两个日期之间的工作日天数原创
3人赞赏了该文章
1,229次浏览
编辑于2023年10月25日 17:36:00
关键词:工作日历、工作日
一、需求
研发项目单据中,需要在维护完日期之后,根据系统维护的工作日历,自动计算出该日期范围内的工作日的天数。
二、思路与方案
1、进入系统工作日历,系统自动打开日历设置界面。
(1)系统路径:
V5.0及以下:【系统服务云】→【基础资料】→【公共数据】→【工作日历】
V6.0.1:【基础服务云】→【基础资料】→【公共数据】→【工作日历】
(2) 工作日历实体是:bd_workcalendar,在单据体dateentry中存储了所有有效日期的日期类型(休息日、工作日、半工作日、节假日)。
2、计算思路:值更新事件中,通过接口BaseDataServiceHelper查出某组织,例如集团公司cosmic-simple对应的工作日历,然后遍历在选择的日期范围内为工作日的天数。
三、实现过程
/** * 单据界面插件 */ public class DevProjectEditPlugin extends AbstractBillPlugIn implements Plugin { @Override public void propertyChanged(PropertyChangedArgs e) { String name =e.getProperty().getName(); if (name.equals("sunp_datestart")||name.equals("sunp_dateend")){ Date datestart = (Date) this.getModel().getValue("sunp_datestart"); Date dateend = (Date) this.getModel().getValue("sunp_dateend"); if (datestart==null||dateend==null){ this.getModel().setValue("sunp_days",0); return; } DynamicObject org = QueryServiceHelper.queryOne("bos_org", "id", new QFilter[]{new QFilter("number", QCP.equals, "cosmic-simple")}); BaseDataServiceHelper bd=new BaseDataServiceHelper(); //根据某集团组织查出该组织下的工作日历 DynamicObject workCalendar = bd.getWorkCalendar(org.getLong("id")); if (workCalendar==null) { return; } DynamicObjectCollection dateentry = workCalendar.getDynamicObjectCollection("dateentry"); int days=0; for(DynamicObject date:dateentry){ Date nowdate = date.getDate("workdate"); //判断在日期范围内为工作日的天数 if (nowdate.compareTo(datestart)>=0&&nowdate.compareTo(dateend)<=0&&date.get("datetype").equals("1")){ days++; } } this.getModel().setValue("sunp_days",days); } super.propertyChanged(e); } }
四、效果图
五、开发环境版本
V5.0.011
六、参考资料
https://vip.kingdee.com/article/13235?productLineId=29&isKnowledge=2
赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *
10金币20金币30金币40金币50金币60金币
可用金币: 0