日期字段计算【汇总链接】
金蝶云社区-天冥异
天冥异
26人赞赏了该文章 6,194次浏览 未经作者许可,禁止转载编辑于2018年07月27日 11:06:58
summary-icon摘要由AI智能服务提供

本文提供了日期和时间处理的多种方法,包括日期计算、时间间隔获取、日期部分(月份、天)和星期几的提取,以及一个计算当月最后一天的巧妙案例。此外,还介绍了如何在不同软件环境中配置实现日期计算功能,并指出了日期运算中的常见陷阱和解决方法。

写本帖子的目前,是把日期字段的计算,
只要能看到本帖子,日期相关的计算就可以一网打尽。

1、日期的计算 如结束日期为开始日期+1天
结束日期=开始日期.AddDays(1)

详细的可参看下面帖子
分享:实体服务规则实现日期计算功能
https://vip.kingdee.com/article/1016


2、时间间隔 如2个日期的时间间隔获取间隔小时数
方式1:(结束日期-开始日期).TotalHours
方式2:(结束日期-开始日期).Days * 24 + (结束日期-开始日期).Hours
方式1比方式2更精确。

下面帖子9楼回复:
根据日期计算天数的公式怎么写?

方式1:(结束日期-开始日期).TotalHours

方式2:(结束日期-开始日期).Days * 24 + (结束日期-开始日期).Hours

方式1比方式2更精确。

为什么会精确,说明如下
(结束日期-开始日期)计算出的是一个时间间隔。最大的单位是天,类似x 天 x 小时 x 分 x 秒。

如获取天数是 (结束日期-开始日期).Days 这个是只获取其中的天数部分,只会是一个整数天。
如果想获取更精确的天数间隔,该是(结束日期-开始日期).TotalDays 这种就会根据后面的小时分钟及秒数计算出小数天。


3、获取日期的 月份,天
日期类型字段.Date.Month

可参看帖子
是否有日期函数可以取出日期字段的月份
取值:日期类型字段元素.Date.Month
示例:
BOS IDE 字段值更新配置:


运行时效果:


相关的:
日期类型字段元素.Date.Year(获取年)
日期类型字段元素.Date.Day(获取天)

4、获取日期是对应的星期几
已解决:可通过选择日期自动计算出对应的星期几吗?
环境:K3 Cloud 5.0 
问题描述:可以通过选择日期自动计算出对应的星期几吗?这个功能可通过配置实现么?
搜狗截图20150529155443.png 
深圳-王林 提供解决办法:
星期字段为下拉列表,关联【周次星期】
配置实体服务规则:计算定义公式的值并填写到指定列
条件:日期 <>''
计算公式:星期=str(int(日期.DayOfWeek))
星期字段为下拉列表,关联【周次星期】
配置实体服务规则:计算定义公式的值并填写到指定列
条件:日期 <>''
计算公式:星期=str(int(日期.DayOfWeek))


000000000000000000000000000.jpg 

终极补充说明,先把日期属性设成上图这样,然后再按照上面那个计算式做就可以了。

5、一个巧妙的案例 获取当月的最后1天
月份最后一天日期 = 日期字段.AddDays(1-float((日期字段.ToString("dd"))));
月份最后一天日期 = 月份最后一天日期.AddMonths(+1);
最终的 月份最后一天日期 = 月份最后一天日期.AddDays(-1);

参看帖子22楼
分享:实体服务规则实现日期计算功能
需求反馈,希望通过实体服务规则配置实现日期计算
今天研究了下【计算定义公式的值并填写到指定列】,可以实现此需求,与大家分享下
如:单据上三个日期字段
FSDate:开始日期,默认当前日期,如2013.11.21
FMDate:中间日期,默认固定日期,如2013.11.27
FEDate:结束日期,待更新字段

实体服务规则选中【计算定义公式的值并填写到指定列】
如稍复杂点的场景,脚本如下:
FEDate  =  FSDate.AddDays((FMDate -  FSDate).Days + 10)
说明:
结束日期 = 开始日期+差量天数
差量天数 = 中间日期与开始日期的差量天数 + 10天

日期间的差量计算使用 “减法” 运算符,得到运算后日期使用Days属性,即得到两段日期的差量天数
在某一日期基础上,增加天数,使用AddDays方法

同理,年、月、日、时、分、秒应该都可以,使用不同方法与属性罢了,除“AddDays”其他还未验证,需要的同学可验证下
年:AddYears Years
月:AddMonths Months
日:AddDays Days
时:AddHours Hours
分:AddMinutes Minutes
秒:AddSeconds Seconds

可能存在的陷阱:如
FEDate = FSDate + 1
希望开始日期加一天,得到结束日期
这种写法存在问题,日期与整数做加法,找不到合适的重载运算符“+”,通过AddDays(整数)实现

当然,要完整实现这个规则,还要记得勾选字段的【即时触发更新事件】属性:)


FENDDate = FSTARDate.AddDays(1-float((FSTARDate.ToString("dd")))) ;
FENDDate = FENDDate.AddMonths(+1);


FENDDate = FENDDate.AddDays(-1);

这样可以算出每个月最后一天

计算月份差:

F_JD_Integer = (F_JD_Date.Year -   FCreateDate.Year) * 12 + (F_JD_Date.Month -   FCreateDate.Month)


图标赞 26
26人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!