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.
Daftarkan email anda disini untuk berlangganan artikel kodiing
ConversionConversion EmoticonEmoticon