Untuk memperoleh nama hari dari tanggal yang diberikan dapat mengikuti dengan langkah berikut:
- Menetapkan basis hari, misalnya 1 januari 2000 jatuh pada hari sabtu = 7
- Menghitung jumlah hari dari basis hari hingga tanggal yang ditentukan dengan memperhitungkan:
- tahun x 365
- jumlah tahun kabisat
- jumlah hari dalam setiap bulan
- tanggal
- dan terakhir mencari nilai sisa setelah dibagi dengan 7
berikut program atau sketch fungsi yang dapat digunakan:
String namaHari[] = {"Minggu","Senin","Selasa","Rabu","Kamis","Jum'at","Sabtu"};
uint16_t jumlahHariPerBulan[]={0,31,59,90,120,151,181,212,243,273,304,334};
void setup() {
Serial.begin(9600);
Serial.println("fungsi mendapatkan Nama hari dari tanggal yang diberikan");
Serial.println("https://www.project.semesin.com");
}
void loop() {
byte hari;
byte tanggal = 4;
byte bulan = 3;
byte tahun = 18;
hari = hariDariTanggal(tanggal, bulan, tahun);
Serial.print(tanggal);
Serial.print("/");
Serial.print(bulan);
Serial.print("/");
Serial.print(tahun);
Serial.print(" => ");
Serial.print(hari);
Serial.print(" : ");
Serial.println(namaHari[hari - 1]);
while(1);
}
//tanggal mulai dari 1
//bulan mulai dari 1
//tahun dua digit
//minggu = 1, sabtu = 7
//basis 1 Januari 2000
byte hariDariTanggal(byte tanggal, byte bulan, uint16_t tahun)
{
uint32_t jumlahHari = tahun * 365;
uint16_t tahunKabisat = tahun/4;
for (byte i = 0; i < tahun; i++)
{
if (!(i%4))
{
jumlahHari++;
}
}
jumlahHari += jumlahHariPerBulan[bulan-1];
if ( (bulan >= 2) && !(tahun % 4))
{
jumlahHari++;
}
jumlahHari+= tanggal;
return ((jumlahHari + 5) % 7) + 1;
}