Input Tanggal

Terkadang kita membutuhkan suatu masukan tanggal yang bisa dikosongkan bisa juga diisi (opsional). Bila kita menggunakan TDateTimePicker, maka nilai tanggal harus diisi (tidak boleh dikosongkan.

Nah untuk input tanggal menggunakan TEdit, maka perlu dibuat fungsi untuk mengecek valid tidaknya tanggal yang dimasukkan.

function TglBenar(a: string): boolean;
CONST
JUMLAHHARI : ARRAY[1..12] OF BYTE =(31,28,31,30,31,30,31,31,30,31,30,31);
begin
StringToDate(a,hari,bulan,tahun,dataError);
if dataError then Result:=False
else
begin
//Cek Bulan
If (Bulan>12) or (Bulan<1)>
Result:=True;
//Jika bulan sudah benar, cek tgl apakah melewati batas hari dlm bln tsb
If Result=True Then
Begin
Case Bulan of
1 : IntJmlHari:=31;
2 : If ((Tahun MOD 4)=0) Then IntJmlHari:=29 else
IntJmlHari:=28;
3 : IntJmlHari:=31;
4 : IntJmlHari:=30;
5 : IntJmlHari:=31;
6 : IntJmlHari:=30;
7 : IntJmlHari:=31;
8 : IntJmlHari:=31;
9 : IntJmlHari:=30;
10: IntJmlHari:=31;
11: IntJmlHari:=30;
12: IntJmlHari:=31;
End;
If (Hari>IntJmlHari) OR (Hari<1)>
Else Result:=True;
End;
end;

//Memisah Tgl,Bln,Thn menjadi Integer
procedure TForm1.StringToDate(A: String; var Hari, Bulan, Tahun: integer;
var DataError: boolean);
Var Valcode:Integer;
begin
DataError:=False;
Val(Copy(a,1,2),hari,valcode);
if valcode<>0 then dataerror:=true else
begin
Val(Copy(a,4,2),bulan,valcode);
if valcode<>0 then DataError:=true else
begin
Val(Copy(a,7,4),tahun,valcode);
if valcode<>0 then DataError:=true;
end;
end;
end;

Pada Event OnKeyPress milik TEdit dibuat procedure :

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If not (Key in['0'..'9','-',#8,#13]) Then Key:=#0;
end;

Penggunaan :

procedure TForm1.BitBtn1Click(Sender: TObject);
Var TanggalInput : TDateTime;
begin
If TglBenar(MaskEdit1.Text) Then
Begin
TanggalInput:=StrToDate(Maskedit1.Text);
Edit2.Text := FormatDateTime(‘dd/mm/yyyy’, TanggalInput);
End else
ShowMessage(‘Pemasukan tanggal salah’);
end;