当前位置:编程学习 > VB >>

新手求助:如何让dateadd("m",1,"2011-2-28")等于"2011-3-31"

如题,谢谢! DateAdd("d", -1, DateAdd("m", 1, DateAdd("d", 1, "2011-2-28"))) 先加1天变成月初第一天,然后加1个月,再减1天 cm = DateAdd("d", DateDiff("d", "2011-02-28", "2011-03-31"), "2011-02-28") 谢谢各位的回复,各位的回复我正在挨着试。如:起始日期是2011-1-30,用dateadd加一个月,连加12次。 我想得到的结果是:2011-2-28,2011-3-30,2011-4-30,2011-5-30......
如果起始日期是2011-1-31,得到的结果是2011-2-28,2011-3-31,2011-4-30,2011-5-30..... lz   2011-1-31 才是月末
Private Sub Command1_Click()
    Dim i As Integer
    Dim myDate As Date
    
    myDate = "2011-1-31"
    
    For i = 1 To 12
        myDate = DateAdd("d", -1, DateAdd("m", 1, DateAdd("d", 1, myDate))) '等于"2011-3-31"
        Debug.Print myDate
    Next i
    
End Sub


2011-02-28 
2011-03-31 
2011-04-30 
2011-05-31 
2011-06-30 
2011-07-31 
2011-08-31 
2011-09-30 
2011-10-31 
2011-11-30 
2011-12-31 
2012-01-31  2月份单独判断,if month(YourDate)=2  单写一个给2月,比较简单 Microsoft(R) Visual Basic(R) Scripting Edition
DateAdd 函数  语言参考 
起始页 | 版本 2 
 

请参阅 


--------------------------------------------------------------------------------

描述
返回已添加指定时间间隔的日期。 
语法
DateAdd(interval, number, date)
DateAdd 函数的语法有以下部分:

部分 描述 
interval 必选。字符串表达式,表示要添加的时间间隔。有关数值,请参阅“设置”部分。 
number 必选。数值表达式,表示要添加的时间间隔的个数。数值表达式可以是正数(得到未来的日期)或负数(得到过去的日期)。 
date 必选。Variant 或要添加 interval 的表示日期的文字。  


设置
interval 参数可以有以下值:
设置 描述 
yyyy 年 
q 季度 
m 月 
y 一年的日数 
d 日 
w 一周的日数 
ww 周 
h 小时 
n 分钟 
s 秒 


说明
可用 DateAdd 函数从日期中添加或减去指定时间间隔。例如可以使用 DateAdd 从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间。要向 date 添加以“日”为单位的时间间隔,可以使用“一年的日数”(“y”)、“日”(“d”)或“一周的日数”(“w”)。
DateAdd 函数不会返回无效日期。如下示例将 95 年 1 月 31 日加上一个月: 

NewDate = DateAdd("m", 1, "31-Jan-95")


在这个示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日,则返回 96 年 2 月 29 日,这是因为 1996 是闰年。
如果计算的日期是在公元 100 年之前,则会产生错误。

如果 number 不是 Long 型值,则在计算前四舍五入为最接近的整数。 

呵,谢谢大家的回复。照我的惯势,2011-02-28加一个月就应该是2011-03-31,不知道原因,望众前辈解释。
用这种方法就会出现如题现象,连加12次不等于一年。

For i = 1 To 12
mydate = DateAdd("m", 1, mydate)
MsgBox mydate
Next用这种方法就能得到正确结果

For i = 1 To 12
MsgBox DateAdd("m", i, mydate)
Next
For i = 1 To 12
mydate = DateAdd("m", 1, mydate)
MsgBox mydate

这个累加到2月的时候得到28,之后就从28加了 For i = 1 To 12
MsgBox DateAdd("m", i, mydate)
Next
***********************
这个每次都是从31加 For i = 1 To 12
MsgBox DateAdd("m", i, mydate)
Next
***************
其实这个也不好,你只是运气从31加了,如果开始是2月,照旧会错,如果从30加也会错
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,