日期:2014-05-17  浏览次数:21036 次

关于日期字段的处理,难度不一般.
现有一要求,将表jiaoyi中的日期字段saletime的值进行处理,将这个值给另一个日期字段repairtime,原则就是saletime(销售日期)加上一年为repairtime(保修截止日期),但是要在这个基础上少一天,比如销售日期是2002-9-6,则该记录的repairtime的值就为2003-9-5,但是我们还要考虑到这样的情况,比如销售日期是2005-5-1,那么保修截止日期就是2006-4-30了,所以处理起来非常复杂,考虑到这么多因素,该如何实现这个日期处理?原来只加一年的情况下,有朋友用下边的方法实现了:
<%
function   reChange(idate)
dim   s
s=split(idate, "- ")
reChange=(clng(s(0))+1)& "- "&s(1)& "- "&s(2)
end   function

%>
<%
        Dim   Sql,Rs,repairtime
        Set   Rs=Server.CreateObject( "ADODB.RecordSet ")
                        Sql= "Select   *   From   [jiaoyi]   Order   By   Id   Desc "
                        Rs.Open   Sql,Connshouhou,1,3
While   Not   Rs.Eof
      repairtime=reChange(Rs( "saletime "))
      Rs( "repairtime ")=repairtime
                              Rs.Update
      Rs.MoveNext
Wend
                Rs.Close:Set   Rs=Nothing
response.redirect   "/index.htm "
%>
现在不知道该如何处理?

------解决方案--------------------
参考datediff函数!
------解决方案--------------------
d1 = dateadd( "yyyy ", 1, "2002-5-1 ")
d2 = dateadd( "d ", -1, d1)
就可以了

function reChange(idate)
dim d1, d2
d1 = dateadd( "yyyy ", 1, CDate(idate))
d2 = dateadd( "d ", -1, d1)
reChange=d2
end function
------解决方案--------------------
datediff
------解决方案--------------------
参考hookee() 的方法!
------解决方案--------------------
repairtime=dateadd(year,1,saletime)
repairtime=Dateadd(day,-1,repairtime)

eg: update Tb_Test Set repairTime=DateAdd(day,-1,dateadd(year,1,saletime))

寫個存儲過程自動更新就行了,計算如上.