About this tool
This calendar prints the Khmer lunar day beside every Gregorian date: the number within the half-month and the word that says which half, កើត for the waxing days up to the full moon and រោច for the waning days after it. Pick a month between 2025 and 2027, or open the full year, and each cell carries both dates, with the public holiday names laid over the top and the Buddhist Era year printed in the heading. It is the view you need when the date that matters is a lunar one: the day of a pagoda observance, the start of a fasting period, a wedding or a funeral date chosen by an astrologer, or the fifteenth waning day that closes Pchum Ben. It is for families, pagoda committees, monks and students of the calendar as much as for anyone planning an ordinary month. It does not print the lunar month name, does not mark the full moon or the new moon with a separate symbol, and does not calculate the festival dates themselves: those come from a stored table. The lunar day numbers are computed for every date you see.
How it works
Each cell calls `getLunarDayLabel` in `format-lunar-date.ts`, which builds a `Date` at 07:00 UTC for that calendar day and passes it to `lunar` from the `khmercal` package. The fixed hour matters: `khmercal` shifts its input back by seven hours before reading it, so 07:00 UTC lands on midnight in Cambodia and the library resolves the same day the grid is showing rather than the day before. The library returns a `period` pair of a number and a letter, where the number is the day inside the half-month and the letter is `K` for waxing or `R` for waning, and the helper renders it with Khmer digits and កើត or រោច. The grid itself comes from the same date arithmetic as the plain calendar, the start weekday is resolved in `Asia/Phnom_Penh` rather than on the device, and the holiday names come from `getEventsForMonth`. The Buddhist Era year in the heading is `toBuddhistEra(year)`, which is simply the Gregorian year plus 543; `khmercal` keeps its own Buddhist Era counter that steps up partway through the lunar year, so the printed figure and the library can differ by one in the later months. The PDF button renders the same cells with the same lunar labels in the browser.
Use cases
- Finding the fifteenth waning day that closes Pchum Ben in a given year without asking a pagoda
- Choosing a wedding or house-blessing date against the waxing and waning days of a month
- Planning a pagoda observance on a specific lunar day and checking which weekday it falls on
- Following a fasting or observance period that is counted in lunar days rather than solar ones
- Teaching a class how the Khmer lunar month divides into two halves of about fifteen days
- Printing a year of lunar dates for a pagoda committee to pin up beside the Gregorian calendar
- Checking the Buddhist Era year used on a document or a headstone against the Gregorian date
Frequently asked questions
What do កើត and រោច mean on each day?
They name the two halves of a lunar month. កើត is the waxing half, counted from the new moon up to the full moon, and its days run from 1 to 15. រោច is the waning half, counted from the full moon back to the new moon, and it runs from 1 to 14 or 1 to 15 depending on whether that month has 29 or 30 days. So ១៥ កើត is the full moon and ១៥ រោច is the new moon.
Is the lunar day calculated or looked up?
Calculated, for every cell. `getLunarDayLabel` calls the `khmercal` library with the date in question and gets back the day and the half-month, so a date that was never in any table still resolves. The festival dates are the opposite: Pchum Ben, Khmer New Year and the Water Festival come from a stored per-year list, not from a calculation. That is why a lunar day can be right while a festival date is out of date.
Which Pchum Ben day is the one that closes the festival?
The fifteenth waning day of the tenth Khmer lunar month. The observance runs for fifteen days, from 1 រោច to 15 រោច of that month, and the fifteenth waning day closes it. You can read that day off the grid, and it is worth knowing that it does not coincide with the last day of the statutory break: in 2026 the ១៥ រោច cell is 11 October while the sub-decree grants 10, 11 and 12 October, so the third day of the holiday is ១ កើត of the following month. The same one-day offset appears in 2025 and 2027.
Why is the Buddhist Era year sometimes one more elsewhere?
Because there are two conventions in play. The heading prints the Gregorian year plus 543, which is the common shorthand. The `khmercal` library keeps a Buddhist Era counter that adds one from partway through the lunar year, so from roughly the last quarter of the year its figure is one higher than the heading. A difference of exactly one between this page and another Khmer calendar is usually this, not an error in either.
Does the calendar show the lunar month name?
No. The grid prints the lunar day and the half-month only, so you see ១៤ កើត rather than a month name such as ភទ្របទ. That is a real limit if you need to know which of the twelve lunar months a date belongs to, and it is why this page is a day-finder rather than a full Chhankitek almanac. The lunar month names exist in the library but are not rendered here.
Where do the holiday names on the grid come from?
From `getEventsForMonth`, which reads the inkhmer.com holiday dataset for 2025 to 2027, the same list the Cambodia Holidays tool shows. That list is not yet reconciled with the annual sub-decrees, so it carries a few days the sub-decrees dropped and misses a few they added. The lunar dates are computed and unaffected by that; only the festival names laid over them are.
Can I print it or save the year as a PDF?
Yes. The PDF button renders in the browser, with the lunar label written into every cell, either as one page for the month on screen or as a single page holding all twelve months in the year view. Print uses the browser dialog and the same grid. The file name carries the year and, in month view, the month number, so a folder of downloads stays sortable.
Why does the lunar label sometimes not match another calendar app?
Three usual causes. The other app may use a different conversion rule for the leap month, which the Khmer lunisolar calendar inserts every two or three years. It may resolve the day in a different time zone, which shifts the answer by one near midnight. Or it may be showing the Thai or Lao variant rather than the Khmer one. A one-day difference near a new moon is common and is not by itself a fault.
Data and accuracy
The lunar label is computed by `getLunarDayLabel` in `format-lunar-date.ts` through `lunar` from the `khmercal` package, called for every day cell and again when a PDF is built. The Gregorian grid and the `Asia/Phnom_Penh` start weekday are in `khmer-lunar-calendar-client.tsx`. The holiday names come from `getEventsForMonth` in `cambodia-holidays-data.ts`, the inkhmer.com dataset for 2025 to 2027, whose dates should follow Sub-Decree No. 167 OrNKr/BK of 5 September 2025 for 2026 and No. 198 ANKr.BK of 16 September 2026 for 2027. Content reviewed on 21 October 2026.
Sources
- khmercal — the Khmer lunar calendar library used for the day and half-month conversion — Seanghay Yath
- Khmer calendar — lunar and solar calendars, the 29 or 30 day month, and the repeated eighth month in a leap year — Wikipedia
- Pchum Ben — a fifteen-day observance ending on the fifteenth waning day of the tenth Khmer month — Wikipedia
- Buddhist calendar — the Buddhist Era epoch that puts BE at CE plus 543 — Wikipedia
Content last reviewed 21 October 2026