[VBA] Hàm xử lý thời gian

vistaab

Yêu THVBA
1. Date
Date 'As Date
Trả về ngày hiện tại.

Ví dụ:
Mã:
Sub test()
Debug.Print Date
End Sub
2. DateAdd
DateAdd(Interval As String, Number As Double, Date) 'As Date
Trả lại một ngày sau đó đã thêm một khoảng thời gian/ ngày nhất định
Interval: Đơn vị tính thời gian
Number: Số lượng đơn vị thời gian cần thêm vào
Date: Mốc thời gian cần thêm vào


Giá trị (Interval)Chú thích
yyyyYear
qQuarter
mMonth
yDay of the year
dDay
wWeekday
wwWeek
hHour
nMinute
sSecond


Ví dụ:
Mã:
Sub test()
Debug.Print DateAdd("y", 1, Date)
End Sub
trong ví dụ trên, hàm date trả về ngày 16/10/2021; kết quả của hàm dateadd trả về ngày 17/10/2021
Mã:
Sub test2()
Debug.Print DateAdd("yyyy", 1, Date)
End Sub
trong ví dụ trên, hàm date trả về ngày 16/10/2021; kết quả của hàm dateadd trả về ngày 16/10/2022
Vậy, mong các bạn cùng góp ý, giải thích bổ sung thêm về ý nghĩa của interval (đơn vị tính thời gian) theo bảng trên. Cụ thể có thể so sánh sự giống và khác nhau giữa y và yyyy; giữa w và www.

3. DateDiff
DateDiff(Interval As String, Date1, Date2, [FirstDayOfWeek As VbDayOfWeek = vbSunday], [FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1]) 'As Long
Trả về sự khác biệt giữa hai giá trị ngày Date1 và Date2 dựa trên đơn vị tính thời gian (interval) được chỉ định.
Interval: Là khoảng thời gian để sử dụng trong việc tính toán sự khác biệt giữa Date1 và Date2
Date1, Date2: Hai ngày đem ra tính toán sự khác biệt
FirstDayOfWeek: Không bắt buộc. Là một hằng số xác định ngày đầu tiên trong tuần. Nếu tham số này bị bỏ qua, nó giả định rằng chủ nhật là ngày đầu tiên của tuần.
Firstweekofyear: Không bắt buộc. Là một hằng số xác định vào tuần đầu tiên của năm. Nếu tham số này bị bỏ qua, nó giả định rằng tuần có chứa ngày 1 tháng 1 là tuần đầu tiên của năm.

Giá trị (Interval)Chú thích
yyyyYear
qQuarter
mMonth
yDay of the year
dDay
wWeekday
wwWeek
hHour
nMinute
sSecond

Ví dụ:
Mã:
Sub DATEDIFF_Fn()
Debug.Print DateDiff("y", "16/10/2021", "16/10/2022")
End Sub
Thủ tục này trả kết quả là 365.
Mã:
Sub DATEDIFF_Fn()
Debug.Print DateDiff("yyyy", "16/10/2021", "16/10/2022")
End Sub
Thủ tục này trả kết quả là 1.

4. DatePart
DatePart(Interval As String, Date, [FirstDayOfWeek As VbDayOfWeek = vbSunday], [FirstWeekOfYear As VbFirstWeekOfYear = VbFirstJan1]) 'As Integer
Trả về một phần xác định của một ngày nhất định.
Interval: Khoảng thời gian muốn trả về kết quả.

Giá trị (Interval)Chú thích
yyyyYear
qQuarter
mMonth
yDay of the year
dDay
wWeekday
wwWeek
hHour
nMinute
sSecond
Date: Ngày đưa ra để xét
FirstDayOfWeek: Không bắt buộc. Là một hằng số xác định ngày đầu tiên trong tuần. Nếu tham số này bị bỏ qua, nó giả định rằng chủ nhật là ngày đầu tiên của tuần.

Hằng số
Giá trị​
Chú thích
vbUseSystem
0​
Use the NLS API setting
vbSunday
1​
Sunday (default)
vbMonday
2​
Monday
vbTuesday
3​
Tuesday
vbWednesday
4​
Wednesday
vbThursday
5​
Thursday
vbFriday
6​
Friday
vbSaturday
7​
Saturday
Firstweekofyear: Không bắt buộc. Là một hằng số xác định vào tuần đầu tiên của năm. Nếu tham số này bị bỏ qua, nó giả định rằng tuần có chứa ngày 1 tháng 1 là tuần đầu tiên của năm.

Hằng số
Giá trị​
Chú thích
vbUseSystem
0​
Use the NSL API setting
vbFirstJan1
1​
Use the first week that includes Jan 1st (default)
vbFirstFourDays
2​
Use the first week in the year that has at least 4 days
vbFirstFullWeek
3​
Use the first full week of the year
Ví dụ:
Mã:
Sub DATEPART_Fn()
Debug.Print DatePart("y", "16/10/2021")
'Result: 289
End Sub
Thủ tục này trả về kết quả 289 (nghĩa là: ngày 16/10/2021 là ngày thứ 289 trong năm 2021)
Mã:
Sub DATEPART_Fn()
Debug.Print DatePart("yyyy", "16/10/2021")
'Result: 2021
End Sub
Thủ tục này trả về kết quả 2021.

5. DateSerial
DateSerial(Year As Integer, Month As Integer, Day As Integer) 'As Date
Trả về một ngày trong năm.

Ví dụ:
Mã:
Sub DATESERIAL_Fn()
Debug.Print DateSerial(1988, 7, 2)
'Result: 02/07/1988
End Sub

6. DateValue
DateValue(Date As String) 'As Date
Trả về giá trị ngày của chuỗi định dạng kiểu ngày.

Ví dụ:
Mã:
Sub DATEVALUE_Fn()
Debug.Print DateValue("02/07/1987")
Debug.Print DateValue("02/07/87")
Debug.Print DateValue("02/07/21")
End Sub
Kết quả trả về trong ví dụ trên:
02/07/1987
02/07/1987
02/07/2021

7. Day
Day(Date) 'As Integer
Trả về một ngày trong tháng (một số từ 1-31) từ giá trị ngày tháng đưa vào.

Ví dụ:
Mã:
Sub DAY_Fn()
Debug.Print Day("20/02/2021") 'Result: 20
Debug.Print Day("12/31/2021") 'Result: 31
End Sub
8. Format Date
Format(Expression, [Format], [FirstDayOfWeek As VbDayOfWeek = vb Sunday], [FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1]) 'As String
Expression: Giá trị ngày cần định dạng.
Format: Không bắt buộc. Là kiểu định dạng mong muốn, có các kiểu sau:

Kiểu định dạngChú thích
General DateTheo định dạng thiết lập trong hệ thống máy tính
Long DateKiểu định dạng ngày dài theo thiết lập trong hệ thống
Medium DateKiểu định dạng ngày trung bình theo thiết lập trong hệ thống
Short DateKiểu định dạng ngày ngắn theo thiết lập trong hệ thống
Long TimeKiểu định dạng thời gian dài theo thiết lập trong hệ thống
Medium TimeKiểu định dạng thời gian trung bình theo thiết lập trong hệ thống
Short TimeKiểu định dạng thời gian ngắn theo thiết lập trong hệ thống
FirstDayOfWeek: Không bắt buộc. Là một hằng số xác định ngày đầu tiên trong tuần. Nếu tham số này bị bỏ qua, nó giả định rằng chủ nhật là ngày đầu tiên của tuần.
Firstweekofyear: Không bắt buộc. Là một hằng số xác định vào tuần đầu tiên của năm. Nếu tham số này bị bỏ qua, nó giả định rằng tuần có chứa ngày 1 tháng 1 là tuần đầu tiên của năm.

Ví dụ:
Mã:
Sub FORMAT_Date_Fn()
Debug.Print Format(#10/16/2021#, "Medium Date") 'Ket qua: 16 Oct 2021
Debug.Print Format(Date, "dd/mm/yyyy") 'Ket qua: 16/10/2021
End Sub
9. Hour
Hour(Time) As Integer
Trả về số giờ (một số từ 0-23) của thời gian đưa vào.

Ví dụ:
Mã:
Sub HOUR_Fn()
Debug.Print Hour(Time)
Debug.Print Hour("4:42:58 PM") 'Result: 16
End Sub
10. Minute
Minute(Time) 'As Integer
Trả về số phút (một số từ 0-59) của thời gian đưa vào.

Ví dụ:
Mã:
Sub MINUTE_Fn()
Debug.Print Minute(Time)
Debug.Print Minute("4:42:58 PM") 'Result: 42
End Sub
11. Month
Month(Date) 'As Integer
Trả về tháng (một số từ 1-12) của giá trị ngày đưa vào.

Ví dụ:
Mã:
Sub MONTH_Fn()
Debug.Print MONTH(Date)
Debug.Print MONTH(#8/20/2017#)
End Sub
12. MonthName
MonthName(Month As long, [Abbreviate As Boolean = False]) 'As String
Trả về một chuỗi đại diện cho tháng được cho một số từ 1 đến 12
Month: Một số từ 1-12 đại diện cho một tháng trong năm
Abbreviate: Không bắt buộc. Tham số thuộc kiểu giá trị Boolean, hoặc TRUE hoặc FALSE. Nếu chọn TRUE, thì tên tháng được viết tắt. Nếu chọn FALSE, tên tháng không viết tắt.

Ví dụ:
Mã:
Sub MONTHNAME_Fn()
Debug.Print MonthName(8) 'August
Debug.Print MonthName(8, True) 'Aug
End Sub
13. Now
Now 'As Date
Trả lại ngày, giờ hiện tại của hệ thống.

Ví dụ:
Mã:
Sub NOW_Fn()
Debug.Print Now
End Sub
14. TimeSerial
TimeSerial(Hour As Integer, Minute As Integer, Second As Integer) 'As Date
Trả về thời gian ứng với giá trị giờ, phút và giây đưa vào.

Ví dụ:
Mã:
Sub TIMESERIAL_Fn()
Debug.Print TimeSerial(16, 30, 22)
'Result: "4:30:22 PM"
End Sub
15. TimeValue
TimeValue(Time As String) 'As Date
Trả về trị số thời gian của một thời gian ở dạng chuỗi.

Ví dụ:
Mã:
Sub TIMEVALUE_Fn()
Dim vTime As Date
vTime = TimeValue("10:25:46 AM")
Debug.Print vTime
End Sub
16. Weekday
Weekday(Date, [FirstDayOfWeek As VbDayOfWeek = vbSunday]) 'As Integer
Trả về một số đại diện cho ngày trong tuần tương ứng với ngày xét.
Date: Ngày đưa ra để xét
FirstDayOfWeek: Không bắt buộc. Là một hằng số xác định ngày đầu tiên trong tuần. Nếu tham số này bị bỏ qua, nó giả định rằng chủ nhật là ngày đầu tiên của tuần.

Giá trịChú thích
vbUseSystemDayOfWeekReturns a number from 1 to 7 and uses your system settings to determine the first day of the week
vbMondayReturns a number from 1 (Monday) to 7 (Sunday).
vbTuesdayReturns a number from 1 (Tuesday) to 7 (Monday).
vbWednesdayReturns a number from 1 (Wednesday) to 7 (Tuesday).
vbThursdayReturns a number from 1 (Thursday) to 7 (Wednesday).
vbFridayReturns a number from 1 (Friday) to 7 (Thursday).
vbSaturdayReturns a number from 1 (Saturday) to 7 (Friday).
vbSundayReturns a number from 1 (Sunday) to 7 (Saturday).
Ví dụ:
Mã:
Sub WEEKDAY_Fn()
Dim LwDay As Integer
LwDay = Weekday("04/08/2017", vbSunday)
Debug.Print LwDay 'Result: 6
End Sub
17. WeekdayName
WeekdayName(Weekday As Long, [Abbreviate As Boolean = False], [FirstDayOfWeek As VbDayOfWeek = vbUseSytemDayOfWeek]) 'As String
Trả về một chuỗi đại diện cho ngày trong tuần ứng với số từ 1 đến 7
Weekday: một số ứng với ngày trong tuần, từ số 1 -7
Abbreviate: Không bắt buộc. Tham số thuộc kiểu giá trị Boolean, hoặc TRUE hoặc FALSE. Nếu chọn TRUE, thì tên ngày được viết tắt. Nếu chọn FALSE, tên ngày không viết tắt.
FirstDayOfWeek: Không bắt buộc. Là một hằng số xác định ngày đầu tiên trong tuần. Nếu tham số này bị bỏ qua, nó giả định rằng chủ nhật là ngày đầu tiên của tuần.

Ví dụ:
Mã:
Sub WEEKDAYNAME_Fn()
Dim sDayName As String
sDayName = WeekdayName(1, False, vbSunday)
'Result: sDayName = "Sunday"
End Sub
18. Year
Year(Date) 'As Integer
Trả về trị số năm có bốn chữ số (một số từ năm 1900 đến 9999) ứng với ngày đang xét.

Ví dụ:
Mã:
Sub YEAR_Fn()
Dim vYear As Integer
vYear = Year("15/08/2017")
'Result: vYear = 2017
End Sub
 
Sửa lần cuối:

NhanSu

SMod
Thành viên BQT
@vistaab tham số interval trong DateAdd nếu là w, d, y có ý nghĩa như nhau, có thể do MS dùng chung bảng tham số của hàm này với DatePart và DateDiff.
Về hàm DateValue dùng cần cẩn thận vì nó có thể ra kết quả khác nhau tùy cài đặt hệ thống, nếu muốn chắc ăn, có thể dùng chuỗi dạng "yyyy/mm/dd"
 
Top