VBA中日期和時間相關的計算

2021-09-27 05:10:12 字數 3273 閱讀 8971

vba中取當前日期的函式是date,當前時間的函式是time,當前日期和時間一起取是now。日期轉換成年月日的函式分別是:year、month、day,引數可以用date或now取出的值。時間轉換成時分秒的函式分別是:hour、minute、second,引數可以用time或now取出的值。

例如: "時:" & hour(now) & chr(10) & _

"分:" & minute(now) & chr(10) & _

"秒:" & second(now)

msgbox "當前日期:" & now & chr(10) & _

"年:" & year(now) & chr(10) & _

"月:" & month(now) & chr(10) & _

"日:" & day(now)

1、日期轉換

很簡單,直接用轉換函式就可以了,例如:

cdate("2012-12-31")
2、日期之間的天數

用datediff函式,注意,工作表單元格中用的函式名稱是datedif,少了乙個f,而且引數順序也不一樣(=datedif(a2,b2,"d"))。例如:

dt = cells(2, 1)     ' 單元格內容:2013-1-1 09:35:08

dd = datediff("d", cdate("2012-12-31"), dt)

日期之間的天數最簡單的就是直接相減,如果日期中包含時間,相減是兩個日期時間值相減,結果是個浮點數(時間差),計算天數需要用datevalue轉換(相當於去掉小數部分的取整)後才能計算,例如:

dt = cells(2, 1)     ' 單元格內容:2013-1-1 09:35:08

dd = datevalue(dt) - cdate("2012-12-31")

實際上,datevalue函式的值就是被轉換日期距1900-1-1的天數加1,也就是說日期1900-1-1的datevalue函式值就是1,在此日期之前的日期excel是不認的。日期時間本質就是乙個浮點數,整數部分是日期,小數部分是時間。

3、時間差計算

時間差計算一般用timevalue()函式將時間轉換成時間值,然後計算。例如:

dt2 = cells(2, 1)     ' 單元格內容:2013-1-1 09:35:08

dt3 = cells(3, 1) ' 單元格內容:2013-1-1 11:55:18

interval=timevalue(dt3)-timevalue(dt2)

timevalue的值在0-1之間,表示0-24小時,實際上就是當前時間佔24小時的比例。利用這個值可以幹很多事,例如,用時間值乘以24再取整就是時間從0點開始的小時值,乘以2460再取整就是時間從0點開始的分鐘值,乘以246060就是時間從0點開始的秒值。再比如,以10分鐘作為間隔,一天的間隔數就是144,那麼任意乙個時間值乘以246再取整就得到從0點開始這個間隔的數量。

注意:timevalue的資料型別是single,如果單元格中只輸入時間,也是給single型別變數賦值。例如:

tt = cells(2, 1)     ' 單元格內容:12:00:00,賦值後tt的值是0.5
我們計算兩個時間差,也就是計算兩個浮點數之差,比如程式的執行時間,將這個差值乘以24就是時間差以小時為單位,乘以2460就是以分為單位,乘以2460*60就是以秒為單位。

時間之間的也可以直接相減,但資料型別必須正確,效果和使用timevalue函式一樣。

4、關於取整

int(12.56)=12:直接取整數部分,

cint(12.56)=13:小數部分四捨五入;

ceiling(12.56,1)=13:向上進,只要有小數,整數部分都加1,

ceiling(12.05,1)=13,當然,這個函式功能比較強大,取整隻是乙個應用;

round(12.56,0)=13:小數部分四捨五入,同樣,該函式有兩個引數,取整隻是乙個應用。

5、關於round函式進行四捨五入

round函式進行四捨五入並不是逢5就入,例如:

round(0.5)=0、 

round(1.5)=2 、

round(2.5)=2 、

round(3.5)= 4 、

round(4.5)=4 ,

「四捨六入五考慮,五後非零就進一,五後為零看奇偶,五前為偶應捨去,五前為奇要進一」。這個四捨五入法是乙個國際標準,大部分的程式設計軟體都使用的是這種方法,據說國際上一般都是用這種方法的。

如果在excel vba中進行四捨五入處理,也可以直接呼叫excel工作表函式,達到直接四捨五入的目的

附:datediff 函式用法

datediff (interval, date1 , date2[,firstweekofyear[,firstweekofyear]])

返回乙個variant(long) 的值,表示兩個指定日期間的時間間隔數目

interval:設定兩個日期之間的期間計算之單位。譬如 >interval="m" 表示計算的單位為月。 >interval 的設定值如:

yyyy > year 年

q quarter 季

m month 月

d day 日

w weekday 星期

h hour 時

n minute 分

s second 秒

date1 ,date2:計算期間的兩個日期表示式,若 >date1 較早,則兩個日期之間的期間結果為正值;若 >date2 較早, 則結果為負值。

firstweekofyear:設定每週第一天為星期幾, 若未設定表示為星期天。 >fw 的設定值如下:

0 使用 >api 的設定值。

1 星期天

2 星期一

3 星期二

4 星期三

5 星期四

6 星期五

7 星期六

firstweekofyear:設定一年的第一周, 若未設定則表示一月一日那一周為一年的第一周。 >fy 的設定值如下:

0 使用 >api 的設定值。

1 一月一日那一周為一年的第一周

2 至少包括四天的第一周為一年的第一周

3 包括七天的第一周為一年的第一周

示例如下:

計算兩個日期的相隔月數.

diffmonthl = datediff("m", date_start, date_end)

sql中日期時間相關函式

增加日期 date add adddate select date add 2020 11 04 interval 31day date 輸出 2020 12 05 select adddate 2020 11 04 31 date 輸出 2020 12 05計算兩個時間差 timestampdif...

Python中日期和時間的操作

python中,對日期和時間的操作,主要使用這3個內建模組 datetime time 和 calendar 獲取當前時間對應的數字 開發程式時,經常需要獲取兩個 位置在執行時的時間差,比如,我們想知道某個函式執行大概耗費了多少時間,就可以使用time.time 來做。import time bef...

Oracle中日期的計算

日期格式引數含義說明 d 一周中的星期幾 day 天的名字,使用空格填充到9個字元 dd 月中的第幾天 ddd 年中的第幾天 dy 天的簡寫名 iw iso標準的年中的第幾周 iyyy iso標準的四位年份 yyyy 四位年份 yyy,yy,y 年份的最後三位,兩位,一位 hh 小時,按12小時計 ...