Format dan Validasi Data Date (Tanggal) dengan MaskEdit VB6

Format dan Validasi Data Date VB6
Dalam membuat program aplikasi khususnya dengan VB6, penggunaan komponen untuk input data jenis Date atau Tanggal merupakan komponen pokok yang harus disiapkan dengan baik, sehingga dalam program aplikasi yang kita susun akan lebih komprehensih, terutama dalam penanganan masalah data jenis tanggal. Penggunaan tanggal pada saat imput secara umum biasanya dipakai pada transaksi atau laporan dengan periode tertentu.

Pada kesempatan ini saya mencoba membagi contoh penanganan format dan validasi serta beberapa fungsi yang berhubungan dengan data jenis tanggal yang telah kami lakukan selama ini. Dalam contoh pembahasan ini, saya menggunakan komponent Masked Edit, yang bisa anda akfifkan komponennya dengan nama Microsoft Masked Edit Control 6.0 (SP3) seperti tampak pada gambar dibawah, yaitu sebuah komponen yang hampir sama dengan Text Box, tetapi dapat ditentukan format input maupun outputnya secara property.


Masked Edit
Secara umum untuk menggunakan komponen Masked Edit terlebih dahulu kita harus mempunyai format mask yang akan digunakan, dan jika akan digunakan untuk tanggal, maka kita gunakan format "##/##/####" yang berarti bahwa data yang dapat kita masukkan adalah angka dengan pemisah garis miring (/) seperti tanggal. Selanjutnya dari data yang kita masukkan, kemudian kita olah lagi validasinya atau jika ingin dikonversi dan lain sebagainya, maka harus disiapkan fungsi-fungsi yang akan mengatur atau mengolah data tanggal tersebut. Fungsi-fungsi akan dibahas di bagian selanjutnya. Berikut contoh source code dari contoh program tersebut adalah sebagai berikut:

Option Explicit

Private Sub cmdConversiJenisDate_Click()
    MsgBox "Data Tanggal 1 dan 2 dikonversi ke jenis Date dengan fungsi STOD" + vbCrLf + _
           "Dan dikurangkan untuk mengetahui hasil sisa tanggal yaitu: " & Stod(txtTanggal2.Text) - Stod(txtTanggal1.Text) & " Hari", vbInformation, "Informasi"
End Sub

Private Sub cmdKonversiJenisString_Click()
    MsgBox "Akan mengkonversi Date (Tangga Hari Ini) dengan fungsi DTOS" + vbCrLf + _
           "Dan menjadikan sebagai data untuk komponen tanggal 1", vbInformation, "Informasi"
           
    txtTanggal1.Mask = ""
    txtTanggal1.Text = Dtos(Date)
    txtTanggal1.Mask = "##/##/####"
End Sub

Private Sub cmdTampilkanNamaBulan_Click()
    MsgBox "Bulan pada tanggal " & Trim(txtTanggal2.Text) & " adalah bulan: " & MonthName(Stod(txtTanggal2.Text))
End Sub

Private Sub cmdTampilkanNamaHari_Click()
    MsgBox "Hari pada tanggal " & Trim(txtTanggal2.Text) & " adalah hari: " & DayName(Stod(txtTanggal2.Text))
End Sub

Private Sub cmdTanggalKosong_Click()
    If IsEmptyDate(txtTanggal2.Text) Then
       MsgBox "Tanggal 2 kosong...!", vbCritical, "Peringatan"
    End If
End Sub

Private Sub cmdTanggalSalah_Click()
    If DateError(txtTanggal2.Text) Then
       MsgBox "Tanggal 2 salah...!", vbCritical, "Peringatan"
    End If
End Sub

Private Sub Form_Load()
    txtTanggal1.Mask = ""
    txtTanggal1.Text = ""
    txtTanggal1.Mask = "##/##/####"

    txtTanggal2.Mask = ""
    txtTanggal2.Text = Dtos(Date)
    txtTanggal2.Mask = "##/##/####"
End Sub

Private Sub txtTanggal1_LostFocus()
    If Not IsEmptyDate(txtTanggal1.Text) Then
       If DateError(txtTanggal1.Text) Then
          MsgBox "Tanggal yang anda masukkan salah...!", vbCritical, "Peringatan"
          txtTanggal1.SetFocus
       End If
    End If
End Sub

Fungsi-Fungsi Tanggal
Fungsi-fungsi yang bisa kita buat dalam rangka untuk mengatur dan validasi data jenis tanggal sebenarnya tidak terbatas tergantung dari kreatifitas dan kebutuhan program, tetapi pada bagian ini saya berikan contoh 6 buah fungsi (dibuat pada module) yang bisa anda gunakan, yaitu seperti contoh code berikut ini:

Option Explicit

'---------------------------------------------------------------
'Cek Jika Tanggal Kosong
'---------------------------------------------------------------
Public Function IsEmptyDate(sDate As String) As Boolean
    IsEmptyDate = IIf(sDate = "  /  /    " Or sDate = "/  /" Or sDate = "__/__/____" Or sDate = "", True, False)
End Function

'---------------------------------------------------------------
'Validasi Data String Berformat Tanggal
'---------------------------------------------------------------
Public Function DateError(sDate As String) As Boolean
   Dim nDay As Integer
   Dim nMonth As Integer
   Dim nYear As Integer
      
   Dim aMonthList As Variant
   
   aMonthList = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
   DateError = False
   
   'Memisahkan Elemen tanggal
   nDay = Val(Left(sDate, 2))
   nMonth = Val(Mid(sDate, 4, 2))
   nYear = Val(Right(sDate, 4))
   
   'Cek Tahun Kabisat
   If (nYear Mod 4) = 0 Then aMonthList(1) = 29
   
   'Cek Bulan & Tangal
   If nMonth < 1 Or nMonth > 12 Then
      DateError = True
   ElseIf nDay < 1 Or nDay > aMonthList(nMonth - 1) Then
     DateError = True
   End If
   
   If Mid(sDate, 3, 1) <> "/" Or Mid(sDate, 6, 1) <> "/" Then
      DateError = True
   End If
   
   If IsEmptyDate(sDate) Then
      DateError = False
   End If
   
   If Len(Trim(Str(nYear))) <> 4 Then
      DateError = True
   End If
End Function

'---------------------------------------------------------------
'Konversi Tanggal Ke Nama Bulan
'---------------------------------------------------------------
Public Function MonthName(dDate As Date) As String
    Dim aMonthList As Variant
    
    aMonthList = Array("Januari", "Februari", "Maret", _
                       "April", "Mei", "Juni", "Juli", _
                       "Agustus", "September", "Oktober", _
                       "Nopember", "Desember")
    MonthName = aMonthList(Month(dDate) - 1)
End Function


'---------------------------------------------------------------
'Konversi Tanggal Ke Nama Hari
'---------------------------------------------------------------
Public Function DayName(dDate As Date) As String
    Dim DayList As Variant
    
    DayList = Array("Minggu", "Senin", "Selasa", _
                    "Rabu", "Kamis", "Jumat", "Sabtu")
    DayName = DayList(Weekday(dDate) - 1)
End Function

'---------------------------------------------------------------
'Konversi String Ke Date
'---------------------------------------------------------------
Public Function Stod(sDate As String) As Date
   Dim nDay As Integer
   Dim nMonth As Integer
   Dim nYear As Integer
   
   If IsEmptyDate(sDate) Then
      Stod = DateSerial(1900, 1, 1)
   Else
      nDay = Val(Left(sDate, 2))
      nMonth = Val(Mid(sDate, 4, 2))
      nYear = Val(Right(sDate, 4))
      Stod = DateSerial(nYear, nMonth, nDay)
   End If
End Function

'---------------------------------------------------------------
'Konversi Date Ke String
'---------------------------------------------------------------
Public Function Dtos(dDate As Date) As String
   Dim nDay As Integer
   Dim nMonth As Integer
   Dim nYear As Integer
   
   If Format(dDate, "dd/mm/yyyy") = "01/01/1900" Then
      Dtos = "  /  /    "
   Else
      nDay = Day(dDate)
      nMonth = Month(dDate)
      nYear = Format(dDate, "yyyy")
   
      Dtos = Addzero(Str(nDay), 2) + "/" + Addzero(Str(nMonth), 2) + "/" + Addzero(Str(nYear), 4)
   End If
End Function

'---------------------------------------------------------------
'Fungsi Manambah Karakter 0 Di Sebelah Kiri
'---------------------------------------------------------------
Public Function Addzero(StringData As String, Length As Integer) As String
   Dim sTemp As String
     
   sTemp = "1" + String(Length, "0")
   Addzero = Right(Val(sTemp) + Val(StringData), Length)
     
End Function

Pada contoh source code tersebut diatas, secara umum dapat kami jelaskan dari masing-masing fungsi yaitu sebegai berikut:
  • Stod
    Merupakan singkatan dari String to Date yang berfungsi untuk merubah jenis data String menjadi data Tanggal (Date).
  • Dtos
    Merupakan singkatan dari Date to String yang berfungsi untuk merubah jenis data Tanggal (Date) menjadi data String.
  • IsEmptyDate
    Berfungsi untuk memeriksa apakah data tanggal kosong ataukah tidak, jika data tanggal kosong maka akan mengembalikan nilai True.
  • DateError
    Berfungsi untuk memeriksa apakah data tanggal salah ataukah tidak, jika data tanggal salah maka akan mengembalikan nilai True.
  • DayName
    Berfungsi untuk mengembalikan nilai balik nama hari dari sebuah data tanggal.
  • MonthName
    Berfungsi untuk mengembalikan nilai balik nama bulan dari sebuah data tanggal.

Untuk contoh program dengan penjelasan diatas, anda dapat download source code disini. Semoga artikel ini bermanfaat bagi anda.

Previous
Next Post »