以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  保质期按月标识,求教有效日期期方法。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=170652)

--  作者:xinghuo
--  发布时间:2021/8/3 14:47:00
--  保质期按月标识,求教有效日期期方法。
生产日期2021-08-03  质保期12个月  到期日期 2021-08-02

Select Case e.DataCol.Name
    Case
"生产日期","质保期"
        If e.DataRow.IsNull("生产日期") Then
            e.
DataRow("到期日期") = Nothing
        Else

            e.
DataRow("到期日期") = e.DataRow("生产日期").AddMonths(e.DataRow("
质保期"))
        End
If
End
Select



生产日期2021-08-03  质保期12个月  到期日期 2021-08-03      怎么提前一天?  


--  作者:有点蓝
--  发布时间:2021/8/3 14:49:00
--  
e.DataRow("到期日期") = e.DataRow("生产日期").AddMonths(e.DataRow("质保期")).adddays(-1)
--  作者:xinghuo
--  发布时间:2021/8/3 16:26:00
--  
谢谢!
--  作者:xinghuo
--  发布时间:2021/8/11 11:52:00
--  
e.DataRow("到期日期") = e.DataRow("生产日期").AddMonths(e.DataRow("质保期")).adddays(-1)

这个不严谨,遇到到期日2月份,就不合适,
生产日期 2021年8月31日,保质期6个月,应该到期日2022年2月28日  代码执行结果是2022年2月27日 
应该怎么改?
求解!

--  作者:有点蓝
--  发布时间:2021/8/11 11:56:00
--  
dim d as date = e.DataRow("生产日期").AddMonths(e.DataRow("质保期"))
if d.month <> 2 then 
d = d.adddays(-1)
end if
e.DataRow("到期日期") = s
--  作者:xinghuo
--  发布时间:2021/8/11 12:54:00
--  
这个按月判断肯定不合适,首先2月1- 28日都没问题,只有生产日期在29-31日 当有效期落到2月底才有问题,应该按日期来判断,另外还要考虑闰年的情况下。
--  作者:有点蓝
--  发布时间:2021/8/11 13:45:00
--  
测试没有问题,请举例说明
--  作者:xinghuo
--  发布时间:2021/8/12 14:37:00
--  
测试下  生产日期2021年8月31日  质保期6个月   看下到期日期应该是2022年2月28日

该代码  生成日期2022年2月27日。

--  作者:有点蓝
--  发布时间:2021/8/12 14:39:00
--  
确定是使用5楼的代码测试的?!!
--  作者:xinghuo
--  发布时间:2021/8/13 11:55:00
--  

Dim d As Date = e.DataRow("生产日期").AddMonths(e.DataRow("质保期"))
If d.month <> 2 Then
    d = d.adddays(-1)
End If
e.DataRow("到期日期") = e.DataRow("生产日期").AddMonths(e.DataRow("质保期")).adddays(-1)