本文提供了日期和时间处理的多种方法,包括日期计算、时间间隔获取、日期部分(月份、天)和星期几的提取,以及一个计算当月最后一天的巧妙案例。此外,还介绍了如何在不同软件环境中配置实现日期计算功能,并指出了日期运算中的常见陷阱和解决方法。
写本帖子的目前,是把日期字段的计算,
只要能看到本帖子,日期相关的计算就可以一网打尽。
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
问题描述:可以通过选择日期自动计算出对应的星期几吗?这个功能可通过配置实现么?
深圳-王林 提供解决办法:
星期字段为下拉列表,关联【周次星期】
配置实体服务规则:计算定义公式的值并填写到指定列
条件:日期 <>''
计算公式:星期=str(int(日期.DayOfWeek))
星期字段为下拉列表,关联【周次星期】
配置实体服务规则:计算定义公式的值并填写到指定列
条件:日期 <>''
计算公式:星期=str(int(日期.DayOfWeek))
终极补充说明,先把日期属性设成上图这样,然后再按照上面那个计算式做就可以了。
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)
推荐阅读