VBA日期的加减函数:DateAdd 函数
返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔。
语法
DateAdd(interval, number, date)
DateAdd 函数语法中有下列命名参数:
部分 | 描述 |
interval | 必要。字符串表达式,是所要加上去的时间间隔。 |
number | 必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。 |
date | 必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。 |
设置
interval 参数具有以下设定值:
设置 | 描述 |
yyyy | 年 |
q | 季 |
m | 月 |
y | 一年的日数 |
d | 日 |
w | 一周的日数 |
ww函数datedif是什么意思 | 周 |
h | 时 |
n | 分钟 |
s | 秒 |
说明
可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。
为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。
DateAdd 函数将不返回有效日期。在以下实例中将 1 月31 日加上一个月:
DateAdd(m, 1, 31-Jan-95)
上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。
如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。
如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。
注意 DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。
DateAdd 函数示例
本示例先取得一个日期,再用 DateAdd 函数显示未来数月后的日期。
Dim FirstDate As Date ' 声明变量。
Dim IntervalType As String
Dim Number As Integer
Dim Msg
IntervalType = "m" ' "m"指定以“月份”作为间隔。
FirstDate = InputBox("Enter a date")
Number = InputBox("Enter number of months to add")
Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
MsgBox Msg
Datedif函数帮助
DATEDIF
计算两个日期之间的天数、月数或年数。提供此函数是为了与 Lotus 1-2-3 兼容。
语法
DATEDIF(start_date,end_date,unit)
Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。日期有多种输入方法:带引号的文本串(例如 "2001/1/30")、系列数(例如,如果使用 1900 日期系统则 36921 代表 2001 年 1 月 30 日)或其他公式或函数的结果(例如,DATEVALUE("2001/1/30"))。有关日期系列数的详细信息,请参阅 NOW。
End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit 为所需信息的返回类型。
计算两个日期之间的天数、月数或年数。提供此函数是为了与 Lotus 1-2-3 兼容。
语法
DATEDIF(start_date,end_date,unit)
Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。日期有多种输入方法:带引号的文本串(例如 "2001/1/30")、系列数(例如,如果使用 1900 日期系统则 36921 代表 2001 年 1 月 30 日)或其他公式或函数的结果(例如,DATEVALUE("2001/1/30"))。有关日期系列数的详细信息,请参阅 NOW。
End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit 为所需信息的返回类型。
Unit
返回
"Y" 时间段中的整年数。
"M" 时间段中的整月数。
"D" 时间段中的天数。
"MD" start_date 与 end_date 日期中天数的差。忽略日期中的月和年。
"YM" start_date 与 end_date 日期中月数的差。忽略日期中的日和年。
"YD" start_date 与 end_date 日期中天数的差。忽略日期中的年。
说明
Microsoft Excel 按顺序的系列数保存日期,这样就可以对其进行计算。如果工作簿使用 1900 日期系统,则 Excel 会将 1900 年 1 月 1 日保存为系列数 1。而如果工作簿使用 1904 日期系统,则 Excel 会将 1904 年 1 月 1 日保存为系列数 0,(而将 1904 年 1 月 2 日保存为系列数 1)。例如,在 1900 日期系统中 Excel 将 1998 年 1 月 1 日保存为系列数 35796,因为该日期距离 1900 年 1 月 1 日为 35795 天。请查阅 Microsoft Excel 如何存储日期和时间。
Excel for Windows 和 Excel for Macintosh 使用不同的默认日期系统。有关详细信息,请参阅 NOW。
示例
DATEDIF("2001/1/1","2003/1/1","Y") 等于 2,即时间段中有两个整年。
DATEDIF("2001/6/1","2002/8/15","D") 等于 440,即在 2001 年 6 月 1 日和 2002 年 8 月 1
Excel for Windows 和 Excel for Macintosh 使用不同的默认日期系统。有关详细信息,请参阅 NOW。
示例
DATEDIF("2001/1/1","2003/1/1","Y") 等于 2,即时间段中有两个整年。
DATEDIF("2001/6/1","2002/8/15","D") 等于 440,即在 2001 年 6 月 1 日和 2002 年 8 月 1
5 日之间有 440 天。
DATEDIF("2001/6/1","2002/8/15","YD") 等于 75,即在 6 月 1 日与 8 月 15 日之间有 75 天,忽略日期中的年。
DATEDIF("2001/6/1","2002/8/15","MD") 等于 14,即开始日期 1 和结束日期 15 之间的差,忽略日期中的年和月。
DATEDIF("2001/6/1","2002/8/15","YD") 等于 75,即在 6 月 1 日与 8 月 15 日之间有 75 天,忽略日期中的年。
DATEDIF("2001/6/1","2002/8/15","MD") 等于 14,即开始日期 1 和结束日期 15 之间的差,忽略日期中的年和月。
纵观Excel日期函数对日期的运算规则得出以下理解(比如Edate、Datedif等都是遵循这个规则的):先理解“月末”——指某月的最后一天再理解“整月”即不是按30天也不是按29天等来算,这个是一个变动的概念。
引用:
——由m月d日至m+1月d日,若m+1月没有d日,则取m+1月的“月末”算一个“整月”。反之,倒推回来,由m月d日至m-1月d日,若m-1月没有d日,则取m-1月的月末算一个“整月”
例子:2006-1-28~31日,往后推1个月得到的都是2-28,其中2006-1-28遵循了m+1=2月d=28日的规则,而2006-1-29~31则遵循了“取月末”的规则,即因为2006年的m+1=2月没有29、30、31日,则取其月末。用=Edate(star_date,1)验证上述规则;用Datedif(star_date,"2006-2-28","m")同样能验证这个规则。即从2006-1-28~31日至2006-2-28的Datedif(……,"m")——都算1个“整月”。
'获取给定日期的当月第一天
Private Function getFirstDayOfMonth(ByVal D As Date) As Date
getFirstDayOfMonth = CDate(Year(D) & "-" & Month(D) & "-1")
End Function
'获取给定日期的当月最后一天
Private Function getLastDayOfMonth(ByVal D As Date) As Date
Dim dteFirstDayOfNextMonth As Date
dteFirstDayOfNextMonth = DateAdd("m", 1, getFirstDayOfMonth(D))
getFirstDayOfMonth = CDate(Year(D) & "-" & Month(D) & "-1")
End Function
'获取给定日期的当月最后一天
Private Function getLastDayOfMonth(ByVal D As Date) As Date
Dim dteFirstDayOfNextMonth As Date
dteFirstDayOfNextMonth = DateAdd("m", 1, getFirstDayOfMonth(D))
getLastDayOfMonth = DateAdd("d", -1, dteFirstDayOfNextMonth)
End Function
'获取给定日期的当年第一天
Private Function getFirstDayOfYear(ByVal D As Date) As Date
getFirstDayOfYear = CDate(Year(D) & "-1-1")
End Function
'获取给定日期的当年最后一天
Private Function getLastDayOfYear(ByVal D As Date) As Date
getLastDayOfYear = CDate(Year(D) & "-12-31")
End Function
End Function
'获取给定日期的当年第一天
Private Function getFirstDayOfYear(ByVal D As Date) As Date
getFirstDayOfYear = CDate(Year(D) & "-1-1")
End Function
'获取给定日期的当年最后一天
Private Function getLastDayOfYear(ByVal D As Date) As Date
getLastDayOfYear = CDate(Year(D) & "-12-31")
End Function
'本月第一天星期几
[A22].Value = Weekday([A21])
b = [A22].Value
Select Case b
Case vbSunday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期日"
Case vbMonday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期一"
Case vbTuesday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期二"
Case vbWednesday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期三"
Case vbThursday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期四"
Case vbFriday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期五"
Case vbSaturday
[A23] = Year([B19]) & "年" & Month([B19]) & "月1日是星期六"
End Select
'得到本月第一周周一的日期
Select Case b
Case vbSunday
[B21].Value = DateAdd("d", 1, [A21])
Case Else
[B21].Value = DateAdd("d", 9 - b, [A21])
End Select
‘获取当天为今年的第几周
使用 DatePart("ww", Date()) 来返回周
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论