ACC: Fungsi untuk menghitung dan menampilkan nilai-nilai tanggal/waktu

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 88657 - Melihat produk di mana artikel ini berlaku.
Moderat: Memerlukan dasar makro, coding, dan interoperabilitas keterampilan.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Karena nilai tanggal/waktu disimpan sebagai nomor double-precision, Anda mungkin menerima salah format hasil saat Anda mencoba untuk memanipulasi tanggal/waktu nilai-nilai dalam ekspresi. Artikel ini menunjukkan kepada Anda bagaimana untuk membuat ekspresi dan fungsi kustom untuk menampilkan tanggal tertentu dan waktu menghitung interval.

Artikel ini mengasumsikan bahwa Anda sudah familiar dengan Visual Basic untuk Aplikasi dan membuat aplikasi Microsoft Access menggunakan pemrograman alat-alat yang disediakan dengan Microsoft Access. Untuk informasi lebih lanjut tentang Visual Basic for Applications, silakan merujuk ke versi "Membangun aplikasi dengan Microsoft Access" manual.

Catatan: Visual Basic for Applications disebut akses dasar di Microsoft Akses versi 1.x dan 2.0. Untuk informasi lebih lanjut tentang akses dasar, Silakan merujuk ke manual "Pengenalan Pemrograman" dalam Microsoft Akses versi 1.x atau manual "Bangunan aplikasi" dalam Microsoft Akses versi 2.0

INFORMASI LEBIH LANJUT

Menampilkan tanggal tertentu

Untuk menampilkan tanggal tertentu, Anda dapat menggunakan fungsi DateSerial() untuk memanipulasi bagian hari, bulan dan tahun dari tanggal. Misalnya, Anda dapat menggunakan kalimat berikut di properti ControlSource teks kotak atau di jendela Debug (atau jendela segera di versi 1.x dan 2.0) untuk kembali tanggal tertentu:

  • Bulan ini:
    DateSerial(Year(Date()), Month(Date()), 1)
  • Bulan berikutnya:
    DateSerial(Year(Date()), Month(Date()) + 1, 1)
  • Hari terakhir bulan ini:
    DateSerial(Year(Date()), Month(Date()) + 1, 0)
  • Hari terakhir bulan berikutnya:
    DateSerial(Year(Date()), Month(Date()) + 2, 0)
  • Hari pertama bulan sebelumnya:
    DateSerial(Year(Date()), Month(Date())-1,1)
  • Hari terakhir dari bulan sebelumnya:
    DateSerial(Year(Date()), Month(Date()),0)
  • Hari pertama kuartal saat ini:
    DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1)
  • Hari terakhir kuartal saat ini:
    DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 4, 0)
  • Hari pertama dari minggu saat (dengan asumsi minggu = hari 1):
    Date() pada PHP - WeekDay(Date()) + 1
  • Hari terakhir minggu saat:
    Date() pada PHP - WeekDay(Date()) + 7
  • Hari pertama dari minggu saat (menggunakan pengaturan dalam dialog Opsi kotak):
    Date() pada-PHP WeekDay(Date(), 0) + 1
  • Hari terakhir minggu saat:
    Date() pada-PHP WeekDay(Date(), 0) + 7
Untuk informasi tentang perhitungan fiskal tahun atau bulan fiskal, silakan Lihat artikel berikut pada Basis Pengetahuan Microsoft:
132101ACC: Bagaimana untuk mendapatkan tahun fiskal/bulan dari tanggal tertentu

Menghitung waktu interval

Karena nilai waktu disimpan sebagai sebagian kecil dari 24 jam sehari, Anda dapat menerima salah format hasil saat Anda mencoba untuk menambah, mengurangi, kalikan atau membagi data time lebih dari 24 jam.

Sebagai contoh, jika Anda mencoba untuk menemukan jumlah jam berlalu antara dua tanggal dengan mengurangi nilai-nilai dalam Visual Basic, Anda dapat menerima nomor yang salah. Untuk menunjukkan hal ini, ketik kode berikut dalam Debug jendela (atau jendela segera di versi 2.0) dan mencatat itu mengembalikan nilai jam 05: 00, daripada nilai benar 53:00 jam:
   StartDate=#6/1/93 8:00AM#
   EndDate=#6/3/93 1:00PM#
   ?Format(EndDate-StartDate,"hh:mm")
				
Untuk menyelesaikan masalah-masalah format yang disebabkan oleh nilai-nilai waktu yang lebih besar dari 24 jam, Anda dapat menggunakan fungsi Int() dan CSng() dalam Visual Basic untuk memisahkan nilai waktu dihitung dalam variabel yang berbeda untuk hari, jam, menit dan detik. Sebagai contoh, Anda dapat menyertakan berikut kode fragmen dalam fungsi kustom untuk menciptakan variabel waktu terpisah:
   '-------------------------------------------------------------------
   ' 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
				
Anda dapat menggunakan totalhours, totalminutes, dan totalseconds variabel menampilkan nilai waktu sebagai satu unit waktu. Hari, jam, menit, dan detik variabel memungkinkan Anda untuk memecah nilai waktu menjadi bagian waktu. Untuk menampilkan nilai-nilai waktu dalam format yang berbeda, Anda dapat menggabungkan variabel ini seperti yang ditunjukkan dalam contoh fungsi-fungsi berikut:

  • Fungsi GetElapsedDays() menghitung berlalu waktu antara dua tanggal/waktu nilai-nilai dan menampilkan hasilnya di hari.
  • Fungsi GetElapsedTime() menghitung berlalu waktu antara waktu nilai-nilai dan menampilkan hasilnya di hari, jam, menit dan detik.
  • Fungsi GetTimeCardTotal() merangkum bidang nilai-nilai waktu di meja Menampilkan total jam dan menit.

GetElapsedDays() contoh fungsi

Untuk membuat fungsi GetElapsedDays(), ikuti langkah berikut:

  1. Buka database contoh Northwind.mdb.(atau NWIND.MDB dalam versi 1.x dan 2.0).
  2. Buat modul dan ketik baris berikut Deklarasi bagian jika tidak sudah ada:
    Option Explicit
  3. Ketik fungsi berikut:
          Function GetElapsedDays (interval)
             Dim days As Long
    
             days = Int(CSng(interval))
             GetElapsedDays = days &" Days "
    
          End Function
    						
  4. Untuk menguji fungsi ini, membuat permintaan baru berdasarkan tabel pesanan.
  5. Dalam QBE grid, menambahkan bidang berikut.
    Microsoft Access versi 7.0 dan 97:
             Field: ShippedDate
                Show: True
             Field: OrderDate
                Show: True
             Field: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderDate])
                Show: True
    Microsoft Access versi 1.x dan 2.0:
             Field: Shipped Date
                Show: True
             Field: Order Date
                Show: True
             Field: ElapsedTime: GetElapsedDays([Shipped Date]-[Order Date])
                Show: True
  6. Menjalankan query. Perhatikan bahwa kolom ElapsedTime menampilkan jumlah hari antara bidang ShippedDate (atau tanggal dikirim dalam versi 1.x dan 2.0) dan OrderDate lapangan (atau tanggal pemesanan di versi 1.x dan 2.0) Setiap record di tabel pesanan.

GetElapsedTime() contoh fungsi

Untuk membuat fungsi GetElapsedTime(), ikuti langkah berikut:

  1. Membuat sebuah tabel baru dengan struktur berikut dan menyimpannya sebagai TimeLog.
          Table: TimeLog
          -----------------------
          Field Name: StartTime
             Data Type: Date/Time
             Format: General Date
          Field Name: EndTime
             Data Type: Date/Time
             Format: General Date
  2. Melihat tabel TimeLog dalam Datasheet tampilan, masukkan tiga berikut Catatan, dan kemudian tutup tabel:
          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. Buat modul dan ketik baris berikut Deklarasi bagian:
    Option Explicit
  4. Masukkan fungsi berikut:

    Catatan: Dalam kode contoh berikut, garis bawah (_) digunakan sebagai baris-kelanjutan karakter. Menghapus underscore dari akhir baris ketika menciptakan kembali kode ini di akses dasar.
          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
    						
    Catatan: GetElapsedTime fungsi memerlukan bahwa Anda melewati itu tanggal dan waktu.
  5. Untuk menguji fungsi ini, buat laporan baru berdasarkan tabel TimeLog menggunakan Wisaya AutoReport.
  6. Melihat laporan dalam Design view.
  7. Menambahkan kotak teks terikat untuk TimeLog tabel detail bagian dan mengatur sifat sebagai berikut:
          Textbox:
             Name: ElapsedTime
             ControlSource: =GetElapsedTime([EndTime]-[StartTime])
             Width: 3 inches
  8. Pratinjau laporan. Catatan bahwa setiap record menampilkan total berlalu waktu dalam hari, jam, menit dan detik.

GetTimeCardTotal() contoh fungsi

Untuk membuat fungsi GetTimeCardTotal(), ikuti langkah berikut:

  1. Membuat sebuah tabel baru dengan struktur berikut dan menyimpannya sebagai TimeCard.
          Table: TimeCard
          -----------------------
          Field Name: Daily Hours
             Data Type: Date/Time
             Format: Short Time
  2. Melihat tabel TimeCard dalam Datasheet tampilan, masukkan empat berikut Catatan, dan kemudian tutup tabel:
    8: 15
    7: 37
    8: 12
    8: 03
  3. Buat modul dan ketik baris berikut Deklarasi bagian jika tidak sudah ada:
    Option Explicit
  4. Ketik fungsi berikut:
          Function GetTimeCardTotal ()
             Dim db As Database, rs As 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. Untuk menguji fungsi ini, ketik baris berikut di jendela Debug (atau Segera jendela di versi 1.x dan 2.0), kemudian tekan ENTER:
    ? (GetTimeCardTotal)
    Perhatikan bahwa jendela Debug menampilkan 32 jam 7 menit.

REFERENSI

Untuk informasi lebih lanjut tentang menghitung nilai-nilai tanggal/waktu, lihat artikel berikut pada Basis Pengetahuan Microsoft:
130514ACC: Menyimpan, menghitung dan membandingkan Data tanggal/waktu

Properti

ID Artikel: 88657 - Kajian Terakhir: 14 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Access 1.0 Standard Edition
  • Microsoft Access 1.1 Standard Edition
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 97 Standard Edition
Kata kunci: 
kbhowto kbprogramming kbmt KB88657 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:88657
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com