Đăng nhập với Microsoft
Đăng nhập hoặc tạo tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

Trung bình: yêu cầu kỹ năng macro, mã hóa và tương tác cơ bản.

Tóm tắt

Vì giá trị ngày/giờ được lưu dưới dạng số đôi chính xác, bạn có thể nhận được kết quả không đúng định dạng khi bạn cố gắng thao tác ngày/giờ giá trị trong một biểu thức. Bài viết này giải thích cách tạo biểu thức và chức năng tùy chỉnh để hiển thị ngày cụ thể và tính toán khoảng thời gian. Microsoft cung cấp ví dụ lập trình để minh hoạ, không bảo hành hoặc thể hiện hoặc ngụ ý. Điều này bao gồm, nhưng không giới hạn, các bảo đảm ngụ ý về khả năng bán hoặc thể dục cho một mục đích cụ thể. Bài viết này giả định rằng bạn đã quen với ngôn ngữ lập trình đang được chứng minh và các công cụ được sử dụng để tạo và quy trình gỡ lỗi. Các kỹ sư hỗ trợ của Microsoft có thể giúp giải thích các chức năng của một quy trình cụ thể, nhưng chúng sẽ không sửa đổi các ví dụ này để cung cấp chức năng bổ sung hoặc xây dựng quy trình để đáp ứng các yêu cầu cụ thể của bạn.

Thông tin Bổ sung

Hiển thị các ngày cụ thể

Để hiển thị ngày cụ thể, bạn có thể sử dụng hàm Dateserial () để thao tác ngày, tháng và năm phần của ngày. Ví dụ: bạn có thể sử dụng các biểu thức sau trong thuộc tính Controlsource của hộp văn bản hoặc trong cửa sổ ngay lập tức trở lại ngày cụ thể.

  • Tháng hiện tại:

    DateSerial (year (ngày ()), tháng (Date ()), 1)

  • Tháng tiếp theo:

    DateSerial (year (ngày ()), tháng (Date ()) + 1, 1)

  • Ngày cuối cùng của tháng hiện tại:

    DateSerial (year (ngày ()), tháng (Date ()) + 1, 0)

  • Ngày cuối cùng của tháng tiếp theo:

    DateSerial (year (ngày ()), tháng (Date ()) + 2, 0)

  • Ngày đầu tiên của tháng trước:

    DateSerial (year (ngày ()), tháng (Date ())-1, 1)

  • Ngày cuối cùng của tháng trước:

    DateSerial (year (ngày ()), tháng (Date ()), 0)

  • Ngày đầu tiên của quý hiện tại:

    DateSerial (year (ngày ()), int ((tháng (Date ())-1)/3) * 3 + 1, 1)

  • Ngày cuối cùng của quý hiện tại:

    DateSerial (year (ngày ()), int ((tháng (Date ())-1)/3) * 3 + 4, 0)

  • Ngày đầu tiên của tuần hiện tại (giả sử chủ nhật = ngày 1):

    Ngày ()-WeekDay (ngày ()) + 1

  • Ngày cuối cùng của tuần hiện tại:

    Ngày ()-WeekDay (ngày ()) + 7

  • Ngày đầu tiên của tuần hiện tại (sử dụng cài đặt trong hộp thoại tùy chọn):

    Ngày ()-WeekDay (ngày (), 0) + 1

  • Ngày cuối cùng của tuần hiện tại:

    Ngày ()-WeekDay (ngày (), 0) + 7

Để biết thêm thông tin về tính toán năm tài chính hoặc tài chính tháng, bấm vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:

210249 làm thế nào để có được năm tài chính hoặc tháng ngày cụ thể trong Access 2000Chúý: nếu bạn làm theo các bước trong ví dụ này, bạn sửa đổi cơ sở dữ liệu mẫu Northwind. MDB. Bạn có thể sao lưu các tập tin Northwind. MDB và làm theo các bước trên một bản sao của cơ sở dữ liệu.

Tính toán khoảng thời gian

Vì giá trị thời gian được lưu dưới dạng một phần của một ngày 24 giờ, bạn có thể nhận được kết quả không đúng định dạng khi bạn cố gắng thêm, trừ, nhân hoặc chia dữ liệu thời gian lớn hơn 24 giờ. Ví dụ: nếu bạn cố gắng tìm số giờ trôi qua giữa hai ngày bằng trừ các giá trị trong Visual Basic, bạn có thể nhận được một số không chính xác. Để chứng minh điều này, gõ mã sau trong cửa sổ ngay lập tức và lưu ý rằng nó trả về giá trị 0:00 giờ thay vì giá trị chính xác 53:00 giờ:

   StartDate=#6/1/93 8:00AM#   EndDate=#6/3/93 1:00PM#   ?Format(EndDate-StartDate,"hh:mm")

Để khắc phục sự cố định dạng do giá trị thời gian lớn hơn 24 giờ, bạn có thể sử dụng chức năng int () và csng () trong Visual Basic để tách một giá trị thời gian tính vào biến khác nhau cho ngày, giờ, phút và giây. Ví dụ: bạn có thể bao gồm đoạn mã sau đây trong một chức năng tùy chỉnh để tạo ra các biến thời gian riêng biệt:

 '------------------------------------------------------------------- ' This sample code separates a time interval into seven variables for ' the following values: days, hours, minutes, seconds, total time in ' hours, total time in minutes, and total time in seconds. ' ' The interval argument is flexible; it can be a single value, an ' expression, or a field reference. '------------------------------------------------------------------- Dim totalhours As Long, totalminutes As Long, totalseconds As Long Dim days As Long, hours As Long, minutes As Long, seconds As Long Dim interval As Variant days = Int(CSng(interval)) totalhours = Int(CSng(interval * 24)) totalminutes = Int(CSng(interval * 1440)) totalseconds = Int(CSng(interval * 86400)) hours = totalhours Mod 24 minutes = totalminutes Mod 60 seconds = totalseconds Mod 60

Bạn có thể sử dụng totalhours, totalminutes và totalseconds biến để hiển thị giá trị thời gian là một đơn vị thời gian. Các ngày, giờ, phút và giây biến cho phép bạn chia nhỏ giá trị thời gian thành các phần của thời gian. Để hiển thị giá trị thời gian trong các định dạng khác nhau, bạn có thể nối các biến này như được thể hiện trong các chức năng mẫu sau:

  • Hàm Getelapseddays () tính toán thời gian trôi qua giữa hai ngày/giờ giá trị và hiển thị kết quả trong ngày.

  • Hàm Getelapsedtime () tính toán thời gian trôi qua giữa các giá trị thời gian và hiển thị kết quả trong ngày, giờ, phút và giây.

  • Hàm Gettimecardtotal () tiền trường thời gian giá trị trong một bảng và hiển thị tổng số giờ và phút.

GetElapsedDays () mẫu chức năng

Để tạo hàm Getelapseddays () , hãy làm theo các bước sau:

  1. Mở cơ sở dữ liệu mẫu Northwind. MDB.

  2. Tạo mô-đun và gõ dòng sau trong phần khai báo nếu nó chưa có:

     Option Explicit
  3. Gõ hàm sau:

     Function GetElapsedDays (interval)    Dim days As Long    days = Int(CSng(interval))    GetElapsedDays = days & " Days " End Function
  4. Để kiểm tra chức năng này, tạo truy vấn mới dựa trên bảng đơn đặt hàng.

  5. Trong lưới QBE, thêm các trường sau. Field: ShippedDate Show: True Field: OrderDate Show: True Field: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate]) Show: True

  6. Chạy truy vấn. Lưu ý rằng cột ElapsedTime Hiển thị số ngày giữa ShippedDate trường và OrderDate trường cho mỗi bản ghi trong bảng đơn đặt hàng.

GetElapsedTime () mẫu chức năng

Để tạo hàm Getelapsedtime () , hãy làm theo các bước sau:

  1. Tạo một bảng mới với cấu trúc sau và lưu nó như TimeLog. Table: TimeLog ----------------------- Field Name: StartTime Data Type: Date/Time Format: General Date Field Name: EndTime Data Type: Date/Time Format: General Date

  2. Xem bảng TimeLog trong chế xem Datasheet, nhập ba bản ghi sau, và sau đó đóng bảng: StartTime EndTime -------------------------------------------- 5/10/95 4:57:00 PM 5/15/95 2:38:00 AM 5/11/95 10:17:31 AM 5/24/95 6:05:00 PM 5/18/95 9:16:43 AM 5/19/95 5:03:00 PM

  3. Tạo mô-đun và gõ dòng sau trong phần khai báo:

     Option Explicit
  4. Nhập hàm sau:

     Function GetElapsedTime(interval) Dim totalhours As Long, totalminutes As Long, totalseconds As _     Long Dim days As Long, hours As Long, Minutes As Long, Seconds As Long days = Int(CSng(interval)) totalhours = Int(CSng(interval * 24)) totalminutes = Int(CSng(interval * 1440)) totalseconds = Int(CSng(interval * 86400)) hours = totalhours Mod 24 Minutes = totalminutes Mod 60 Seconds = totalseconds Mod 60 GetElapsedTime = days & " Days " & hours & " Hours " & Minutes & _ " Minutes " & Seconds & " Seconds " End Function

    Lưu ý: Hàm Getelapsedtime yêu cầu bạn vượt qua nó một ngày và một thời gian.

  5. Để kiểm tra chức năng này, tạo một báo cáo mới dựa trên bảng Timelog bằng cách sử dụng thuật sĩ autoreport.

  6. Xem báo cáo trong xem thiết kế.

  7. Thêm một hộp văn bản unbound Collection by vào phần chi tiết của bảng TimeLog và thiết lập các thuộc tính như sau: Textbox --------------- Name: ElapsedTime ControlSource: =GetElapsedTime([EndTime]-[StartTime]) Width: 3 inches

  8. Xem báo cáo. Lưu ý rằng mỗi bản ghi sẽ hiển thị tổng thời gian đã trôi qua theo ngày, giờ, phút và giây.

GetTimeCardTotal () mẫu chức năng

Để tạo hàm Gettimecardtotal () , hãy làm theo các bước sau:chú ý: mã mẫu trong bài viết này sử dụng đối tượng truy cập dữ liệu Microsoft. Mã này chạy đúng cách, bạn phải tham khảo thư viện đối tượng Microsoft DAO 3,6. Để làm như vậy, bấm vào tham chiếu trên menu công cụ trong Visual Basic Editor và đảm bảo rằng hộp Thư viện đối tượng Microsoft dao 3,6 được chọn.

  1. Tạo một bảng mới với cấu trúc sau và lưu nó như TimeCard. Table: TimeCard ----------------------- Field Name: Daily Hours Data Type: Date/Time Format: Short Time

  2. Xem bảng TimeCard trong chế độ xem Datasheet, nhập bốn hồ sơ sau, và sau đó đóng bảng: 8:15 7:37 8:12 8:03

  3. Tạo mô-đun và gõ dòng sau trong phần khai báo nếu nó chưa có:

     Option Explicit
  4. Gõ hàm sau:

     Function GetTimeCardTotal () Dim db As DAO.Database, rs As DAO.Recordset Dim totalhours As Long, totalminutes As Long Dim days As Long, hours As Long, minutes As Long Dim interval As Variant, j As Integer Set db = dbengine.workspaces(0).databases(0) Set rs = db.OpenRecordset("timecard") interval = #12:00:00 AM#    While Not rs.EOF       interval = interval + rs![Daily hours]       rs.MoveNext    Wend totalhours = Int(CSng(interval * 24)) totalminutes = Int(CSng(interval * 1440)) hours = totalhours Mod 24 minutes = totalminutes Mod 60 GetTimeCardTotal = totalhours & " hours and " & minutes & " minutes" End Function
  5. Để kiểm tra chức năng này, gõ dòng sau trong cửa sổ ngay lập tức, và sau đó nhấn ENTER:

     ?GetTimeCardTotal()

    Lưu ý rằng cửa sổ ngay lập tức hiển thị 32 giờ và 7 phút.

Tham khảo

Để biết thêm thông tin về tính toán ngày/giờ giá trị, hãy bấm vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:

210276 lưu trữ, tính toán và so sánh dữ liệu ngày/giờ

Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?

Cảm ơn phản hồi của bạn!

×