Giới thiệu
Thuật toán Zeller được dùng để tìm thứ trong tuần từ một ngày cho trước. Công thức để tìm thứ bằng thuật toán Zeller là:

Công thức chứa một số biến; Chúng là:
d – Ngày của ngày tháng.
m: Là mã tháng. Từ Tháng 3 đến Tháng 12 là 3 đến 12, cho Tháng 1 là 13, và Tháng 2 là 14. Khi xét Tháng 1 hoặc Tháng 2, năm cho trước sẽ giảm đi 1.
y – Hai chữ số cuối của năm
c – Hai chữ số đầu của năm
w – Thứ trong tuần. Khi là 0, là Thứ Bảy, khi là 6, nghĩa là Thứ Sáu
Đầu vào và Đầu ra
Đầu vào: Ngày, tháng và năm: 4, 1, 1997 Đầu ra: Đó là: Thứ Bảy
Thuật toán
zellersAlgorithm(day, month, year)
Đầu vào: Ngày tháng năm.
Đầu ra: Ngày đó là thứ mấy (Chủ Nhật đến Thứ Bảy).
Begin
if month > 2, then
mon := month
else
mon := 12 + month
giảm năm đi 1
y := hai chữ số cuối của năm
c := hai chữ số đầu của năm
w := day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + 5*c
w := w mod 7
return weekday[w] // weekday sẽ chứa các ngày từ Thứ Bảy đến Thứ Sáu
End
Ví dụ (C++)
#include <iostream>
#include <cmath>
using namespace std;
string weekday[7] = {"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
string zellersAlgorithm(int day, int month, int year) {
int mon;
if(month > 2)
mon = month; // cho tháng 3 đến 12 mã tháng giống tháng
else {
mon = (12+month); // cho Tháng 1 và 2, mã tháng sẽ là 13 và 14
year--; // giảm năm cho tháng 1 và 2
}
int y = year % 100; // hai chữ số cuối
int c = year / 100; // hai chữ số đầu
int w = (day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + (5*c));
w = w % 7;
return weekday[w];
}
int main() {
int day, month, year;
cout << "Enter Day: "; cin >> day;
cout << "Enter Month: "; cin >> month;
cout << "Enter Year: "; cin >> year;
cout << "It was: " << zellersAlgorithm(day, month, year);
}
Kết quả
Enter Day: 04 Enter Month: 01 Enter Year: 1997 It was: Saturday