AIXemNgay.comAI Xem Ngày
Lịch âm dương Việt Nam hiểu từ gốc

Cách tính âm lịch Việt Nam: dựng lịch một năm qua năm bước

Âm lịch Việt Nam được dựng từ thời điểm trăng mới, đông chí và trung khí theo giờ Hà Nội. Năm bước dựng lịch một năm, kèm bộ ca thử để kiểm phần mềm.

Top-down view of a wooden desk in Da Lat, Lam Dong with a brass compass, a small moon globe, a ruler and an open notebook with empty pages, cool morning light

Âm lịch Việt Nam được tính bằng năm bước: tìm thời điểm các lần trăng mới, đổi sang giờ Hà Nội để xác định mùng Một từng tháng, tìm hai ngày đông chí để định tháng Mười Một, đếm số tháng giữa chúng, rồi đặt tên tháng và xác định tháng nhuận nếu có. Toàn bộ phần khó nằm ở bước đầu: tính thời điểm trăng mới và vị trí mặt trời đủ chính xác.

Bài này dành cho người muốn hiểu lịch được dựng ra sao: sinh viên làm đồ án, lập trình viên đang viết tính năng âm lịch cho ứng dụng, người làm nội dung cần giải thích cho độc giả. Bạn sẽ có quy trình bằng lời, các nguồn công thức thiên văn phổ biến, và quan trọng nhất là một bộ ca thử để biết chương trình của mình, hay đoạn mã do AI viết, có tính đúng lịch Việt Nam không.

Nguyên liệu đầu vào: ba loại thời điểm thiên văn

Một bản âm lịch chỉ cần ba loại dữ liệu. Thứ nhất là thời điểm trăng mới (sóc) của từng tháng, tức lúc mặt trăng và mặt trời có cùng kinh độ hoàng đạo. Thứ hai là thời điểm đông chí của từng năm, lúc mặt trời đạt kinh độ hoàng đạo 270 độ. Thứ ba là thời điểm các trung khí, tức các mốc mặt trời đạt kinh độ là bội số của 30 độ, dùng để quyết định tháng nhuận.

Cả ba đều là bài toán vị trí mặt trời và mặt trăng, được giải bằng các chuỗi công thức thiên văn đã chuẩn hoá. Một nguồn được dùng rất rộng rãi là cuốn Astronomical Algorithms của Jean Meeus, xuất bản lần đầu năm 1991, chứa các công thức tính pha trăng và vị trí mặt trời đủ chính xác cho việc làm lịch. Nhiều chương trình âm lịch phổ biến dựa trên các công thức kiểu này, ở dạng rút gọn.

Độ chính xác cần thiết là vài phút. Nghe có vẻ khắt khe, nhưng chỉ vài phút sai lệch là đủ làm sai lịch trong những tháng mà thời điểm trăng mới rơi sát nửa đêm. Với các tháng còn lại, sai số cả giờ đồng hồ vẫn cho kết quả đúng, đó là lý do một chương trình tính sai có thể chạy "đúng" gần hết thời gian rồi bất ngờ lệch một ngày.

Năm bước dựng âm lịch cho một năm

Quy trình dưới đây mô tả bằng lời cách dựng âm lịch cho khoảng thời gian từ tháng Mười Một năm trước đến tháng Mười Một năm sau. Lặp lại cho nhiều năm là có lịch dài hạn.

  1. Tính các thời điểm trăng mới trong khoảng mười bốn tháng bao quanh năm cần dựng. Đổi mỗi thời điểm sang giờ Hà Nội (UTC+7). Ngày dương lịch chứa thời điểm đó là ngày mùng Một của một tháng âm.
  2. Tính hai ngày đông chí: đông chí năm trước và đông chí năm cần dựng, cũng theo giờ Hà Nội. Tháng âm nào chứa ngày đông chí thì tháng đó là tháng Mười Một. Như vậy bạn có hai tháng Mười Một làm hai đầu mốc.
  3. Đếm số tháng từ tháng Mười Một thứ nhất đến trước tháng Mười Một thứ hai. Được 12 thì năm thường, được 13 thì năm có tháng nhuận.
  4. Tìm tháng nhuận nếu có: duyệt từ tháng sau tháng Mười Một thứ nhất, tháng đầu tiên không chứa trung khí nào là tháng nhuận, lấy tên tháng liền trước.
  5. Đặt tên và đóng gói: đặt tên tháng Chạp, Giêng, Hai… lần lượt; mỗi tháng dài bằng số ngày từ mùng Một của nó đến mùng Một tháng sau, nên tự nhiên là 29 hoặc 30. Từ đây có thể gán thêm can chi cho ngày, tháng, năm theo quy tắc đếm vòng sáu mươi, phần này có danh mục riêng trên trang.

Để đổi qua lại giữa ngày dương và ngày âm, các chương trình thường dùng số ngày Julius, tức số thứ tự liên tục của ngày tính từ một mốc rất xa trong quá khứ. Mọi phép cộng trừ ngày được làm trên con số này, tránh hẳn chuyện tháng dương có 28, 30 hay 31 ngày.

Đi một vòng tính thử bằng lời (ví dụ giả định)

Để năm bước bớt trừu tượng, hãy đi qua một vòng với số liệu giả định. Giả sử đông chí năm trước rơi vào ngày 22 tháng 12, theo giờ Hà Nội. Bạn tìm lần trăng mới gần nhất trước hoặc đúng ngày đó, giả sử là ngày 12 tháng 12. Như vậy tháng âm bắt đầu ngày 12 tháng 12 chứa đông chí, nó là tháng Mười Một thứ nhất.

Tiếp theo, giả sử đông chí năm nay rơi vào ngày 21 tháng 12 và lần trăng mới chứa nó rơi vào ngày 1 tháng 12. Đó là tháng Mười Một thứ hai. Giờ bạn đếm các lần trăng mới từ ngày 12 tháng 12 năm trước đến trước ngày 1 tháng 12 năm nay. Nếu đếm ra 12 lần, năm đó không nhuận: các tháng lần lượt là Mười Một, Chạp, Giêng, Hai cho tới Mười.

Nếu đếm ra 13 lần, bạn kiểm từng tháng xem chứa trung khí nào. Giả sử tháng thứ bảy kể từ tháng Mười Một thứ nhất không chứa trung khí nào; tháng ngay trước nó là tháng Năm, nên tháng này thành tháng Năm nhuận. Các tháng phía sau vẫn mang tên Sáu, Bảy, Tám… như thường, chỉ là mỗi tháng đến muộn hơn một tuần trăng so với năm không nhuận. Cuối cùng, đếm khoảng cách giữa các ngày mùng Một liên tiếp để ghi tháng nào 29, tháng nào 30 ngày.

Toàn bộ vòng trên không cần một công thức nào ngoài thời điểm trăng mới, đông chí và trung khí. Đó là lý do người ta nói phần khó của âm lịch là thiên văn, còn phần lịch pháp thì chỉ là những quy tắc đếm rất gọn.

Những chỗ chương trình âm lịch hay tính sai

Dùng sai múi giờ. Lỗi phổ biến nhất. Thư viện lịch Đông Á có sẵn thường tính theo UTC+8. Kết quả trùng lịch Việt Nam phần lớn thời gian, chỉ lệch đúng những tháng có trăng mới trong khoảng 23 giờ đến nửa đêm giờ Hà Nội.

Dùng giờ máy chủ thay vì giờ Hà Nội. Chương trình chạy trên máy chủ đặt ở nước ngoài, lấy múi giờ hệ thống để quy đổi, nên cùng một mã cho kết quả khác nhau tuỳ nơi chạy. Luôn cố định UTC+7 trong mã, không lấy theo máy.

Dùng trăng mới trung bình. Lấy 29,53 ngày nhân lên để ra mùng Một là cách rút gọn sai; thời điểm trăng mới thật có thể lệch nhiều giờ so với trung bình.

Đặt tháng nhuận theo quy tắc khác. Có mã đặt tháng nhuận ở cuối năm, hoặc dùng bảng tra cứu chép từ nguồn không rõ. Phải theo quy tắc trung khí và tháng Mười Một chứa đông chí.

Sai ở ranh giới năm dương. Tháng Mười Một và tháng Chạp âm lịch thường vắt qua năm dương mới. Mã đổi ngày dễ gán nhầm năm âm cho những ngày từ 1/1 dương lịch đến trước Tết.

Làm tròn sai thời điểm. Quy đổi từ số thực sang ngày bằng cách làm tròn thay vì lấy phần nguyên sau khi cộng múi giờ, dẫn đến lệch một ngày ở những thời điểm sát nửa đêm.

Bộ ca thử cho mọi chương trình lịch âm Việt Nam

Trước khi tin một chương trình, hay một đoạn mã do chatbot viết, hãy chạy nó với các ngày dưới đây. Đây đều là những điểm mà sai múi giờ hoặc sai quy tắc tháng nhuận sẽ lộ ra.

Ca thửKết quả đúng theo lịch Việt NamLỗi mà ca này bắt được
Tết Đinh HợiNgày 17/2/2007Dùng UTC+8 sẽ ra 18/2/2007
Tết Ất SửuNgày 21/1/1985Dùng UTC+8 sẽ ra 20/2/1985, lệch cả tháng
Năm 2023Có tháng Hai nhuậnSai quy tắc tháng nhuận
Năm 2025Có tháng Sáu nhuậnSai quy tắc tháng nhuận
Năm 2024Không có tháng nhuậnChèn nhuận theo chu kỳ cố định
Ngày 1/1 của một năm dương bất kỳThuộc năm âm lịch trướcGán nhầm năm âm ở ranh giới năm dương

Ngoài các ca trên, nên thêm vài chục ngày ngẫu nhiên và so với một bảng đổi lịch Việt Nam đáng tin. Nếu chương trình qua được cả ca đặc biệt lẫn ca ngẫu nhiên, bạn có thể tạm tin; dù vậy với ngày quan trọng của người dùng, vẫn nên khuyến nghị họ đối chiếu lịch năm hiện hành.

Nhờ AI viết mã lịch âm: được gì, phải canh gì

Các trợ lý lập trình viết được khung mã tính âm lịch khá nhanh, kể cả phần chuyển đổi số ngày Julius và công thức pha trăng rút gọn. Chỗ yếu là chúng hay lấy mẫu từ mã tiếng Trung hoặc thư viện có sẵn tính theo giờ Bắc Kinh, và ít khi tự nhắc bạn điều đó. Vì vậy, câu lệnh đầu tiên phải nói rõ: "Viết hàm đổi ngày dương sang ngày âm theo âm lịch Việt Nam, tính theo múi giờ UTC+7, tháng nhuận theo quy tắc trung khí, tháng Mười Một chứa đông chí."

Câu lệnh thứ hai nên là yêu cầu kiểm thử: "Viết thêm bộ kiểm thử gồm các ca: Tết 2007 là 17/2/2007, Tết 1985 là 21/1/1985, năm 2023 nhuận tháng Hai, năm 2025 nhuận tháng Sáu." Khi bạn chạy và một ca thất bại, đưa nguyên kết quả cho trợ lý để nó sửa. Cách làm này nhanh hơn nhiều so với đọc từng dòng công thức thiên văn.

Cuối cùng, đừng để chatbot tự "nhớ" đáp án ca thử: bạn tự lấy đáp án từ lịch đáng tin. Nếu mô hình tự sinh cả mã lẫn đáp án, nó có thể sai cả hai theo cùng một hướng và mọi ca thử vẫn "đạt". Với ứng dụng có người dùng thật, ghi rõ trong phần giới thiệu là lịch tính theo giờ Việt Nam và khuyên người dùng đối chiếu ngày quan trọng.

Khi nào nên tự tính, khi nào nên dùng lịch có sẵn

Không phải ai muốn hiểu lịch cũng cần tự viết chương trình. Vài gợi ý để chọn đúng việc:

  • Bạn chỉ cần đổi vài ngày giỗ, ngày sinh: dùng lịch điện thoại đã bật âm lịch và một tờ lịch in, không cần tính.
  • Bạn làm bài thuyết trình, bài viết giải thích lịch: hiểu năm bước ở trên là đủ, ví dụ minh hoạ nên ghi "ví dụ giả định" nếu không phải ngày thật.
  • Bạn viết ứng dụng nhỏ cho gia đình hoặc cửa hàng: dùng thư viện đã kiểm với lịch Việt Nam, chạy bộ ca thử trước khi dùng.
  • Bạn làm sản phẩm cho nhiều người dùng: tự tính hoặc dùng thư viện đều được, nhưng bắt buộc có bộ ca thử, cố định múi giờ, và có kênh để người dùng báo ngày sai.
  • Bạn nghiên cứu lịch cổ, đối chiếu gia phả: cần thận trọng hơn nữa, vì lịch các thời kỳ trước có thể dùng phép tính và kinh tuyến khác hiện nay.

Ở mọi mức, nguyên tắc chung là: hiểu được cách lịch được dựng, rồi luôn kiểm lại với một nguồn độc lập trước khi dùng một ngày cho việc quan trọng.

Câu hỏi thường gặp

Có thể tính âm lịch chỉ bằng giấy bút không?

Về nguyên tắc có, nếu bạn có bảng thời điểm trăng mới và đông chí đã tính sẵn; phần còn lại chỉ là đếm ngày. Tự tính thời điểm trăng mới bằng tay thì rất tốn công và dễ sai, nên ngày nay người ta dùng máy tính cho bước đó.

Âm lịch tính được cho những năm rất xa không?

Công thức thiên văn cho phép tính hàng trăm năm trước và sau, nhưng càng xa độ chính xác càng giảm, nhất là do tốc độ tự quay của trái đất thay đổi chậm theo thời gian. Với các thế kỷ trước, còn phải tính tới việc lịch thời đó dùng phép tính khác.

Vì sao các ứng dụng lịch có khi khác nhau một ngày?

Nguyên nhân thường gặp nhất là khác múi giờ tính lịch, sau đó là công thức rút gọn quá mức hoặc lỗi ở ranh giới năm. Khi hai ứng dụng khác nhau, đối chiếu với lịch năm hiện hành do cơ quan có thẩm quyền ban hành để biết bên nào đúng.

Số ngày Julius là gì và có liên quan lịch Julius không?

Số ngày Julius là số thứ tự liên tục của ngày, dùng trong thiên văn để tính khoảng cách thời gian cho gọn. Tên gọi có nguồn gốc lịch sử nhưng không đồng nghĩa với việc dùng lịch Julius; nó chỉ là một bộ đếm ngày.

Có cần tính tiết khí riêng khi dựng âm lịch không?

Cần, ít nhất là các trung khí, vì chúng quyết định tháng nhuận. Nhiều chương trình tính luôn cả 24 tiết khí để hiển thị, nhưng với riêng việc dựng tháng, chỉ đông chí và các trung khí là bắt buộc.

Dùng AI hỏi thẳng "hôm nay âm lịch ngày mấy" có đáng tin không?

Không nên tin hoàn toàn. Chatbot không phải lúc nào cũng biết ngày hiện tại chính xác và có thể tính theo múi giờ khác. Câu hỏi đó nên trả lời bằng lịch điện thoại đã bật âm lịch hoặc tờ lịch, còn AI dùng để giải thích nguyên lý.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138