If you have ever booked a flight for a school holiday and found the fare doubles the day before you leave, this is usually why. Malaysia runs two school calendars, they are offset by one day, and the offset moves in both directions depending on which end of the break you are looking at.

Everything below comes from the Ministry of Education's own calendars on moe.gov.my, under Takwim and Kalendar Akademik. The 2026 dates are from the Kalendar Akademik Tahun 2026, first read on 28 August 2026 and re-checked on 13 October 2026 (the file is unchanged). The 2027 dates are from the Kalendar Akademik Tahun 2027, which the ministry added to the same page in early October 2026. In both, the term dates for each group are in Lampiran A and B, and the festive holidays are in Lampiran C.

The two groups, and the state that switched

Group A: Kedah, Kelantan and Terengganu.

Group B: Johor, Melaka, Negeri Sembilan, Pahang, Perak, Perlis, Pulau Pinang, Sabah, Sarawak, Selangor, Wilayah Persekutuan Kuala Lumpur, Wilayah Persekutuan Labuan and Wilayah Persekutuan Putrajaya.

The split exists because Group A states run a Friday-Saturday weekend while Group B runs Saturday-Sunday, so the school week itself starts and ends on different days.

That list used to have a fourth state in it. The Kalendar Akademik Tahun 2024/2025 lists Group A as Johor, Kedah, Kelantan dan Terengganu. By the 2025/2026 amended calendar, Johor has moved into Group B, where it remains for 2026. The reason is not academic: Johor reverted from a Friday-Saturday weekend to Saturday-Sunday with effect from 1 January 2025, which left Kedah, Kelantan and Terengganu as the only Friday-Saturday states.

One structural change is worth noting too. The 2026 document is titled Kalendar Akademik Tahun 2026, a single calendar year, where 2023/2024, 2024/2025 and 2025/2026 all straddled two.

How the 2026 year is actually built

Both groups run the same skeleton, and the ministry publishes a day count for every segment of it.

Group A opened the year on Sunday 11 January 2026. Group B opened on Monday 12 January. That is the same one-day offset, arriving from the same place: Sunday is an ordinary school day in a Friday-Saturday state.

Penggal 1 runs to 19 March for Group A and 20 March for Group B, which the ministry counts as 10 weeks and 44 school days for Group A, 43 for Group B. After Cuti Penggal 1 the term resumes and runs to 21 or 22 May, another 8 weeks, worth 40 days for Group A and 39 for Group B. Penggal 2 opens after the mid-year break and runs to 27 or 28 August: 12 weeks and 58 school days for both groups. The September-to-December stretch is 13 weeks.

Add the four segments up and Group A children sit 204 school days in 2026 against Group B's 202. The entire two-day difference is in the first half of the year; from June onwards the two groups clock identical totals.

What is left of 2026, by group

The academic year is built as two terms, each split in the middle by a short break, with a long break between the terms and another at the end of the year. By mid-October three of the four 2026 breaks are over, and schools are in the final stretch of Term 2.

The final stretch. Group A went back on 6 September and runs to Thursday 3 December. Group B went back on 7 September and runs to Friday 4 December. Both groups clock 62 school days in this stretch, the longest single run of the year.

One day off in November. The Deepavali allocation is the only break inside the stretch: Monday 9 November for Group A and for Sarawak, Tuesday 10 November for the rest of Group B. The November section below explains why the dates differ.

Cuti Akhir Persekolahan, the year-end break. Group A: 4 to 31 December 2026, 28 days. Group B: 5 to 31 December 2026, 27 days. Christmas falls inside it, and no school reopens before Monday 4 January 2027.

For reference, the earlier 2026 breaks were: Cuti Penggal 1, Group A 20 to 28 March and Group B 21 to 29 March, nine days each; Cuti Pertengahan Tahun, Group A 22 May to 6 June and Group B 23 May to 7 June, 16 days each; and Cuti Penggal 2, Group A 28 August to 5 September and Group B 29 August to 6 September, nine days each.

The two festivals that already moved the dates

Lampiran C does more than note which festivals land inside a break. For three of them the ministry allocates additional holidays, and this is where the group split does its real work.

Chinese New Year, 17 and 18 February 2026, a Tuesday and a Wednesday. The ministry granted three extra days to each group, and not the same three. Group A received Sunday 15, Monday 16 and Thursday 19 February. Group B received Monday 16, Thursday 19 and Friday 20 February.

The asymmetry is deliberate. Group A's weekend is Friday and Saturday, so its run opened with the weekend of 13 and 14 February and closed on Saturday 21 February: nine continuous days. Group B's weekend is Saturday and Sunday, so its run went from 14 to 22 February: also nine continuous days. Different dates, identical length. That is the clearest illustration in the whole document of what the grouping is for.

Hari Raya Aidilfitri, 21 and 22 March 2026, a Saturday and a Sunday. This one fell inside Cuti Penggal 1, and the ministry still added days in front of it: Thursday 19 March for Group A, and Thursday 19 and Friday 20 March for Group B.

That matters more than it looks. It means the March break was not the nine days the holiday row advertises. With the allocated days attached, Group A was away from 19 to 28 March, ten days, and Group B from 19 to 29 March, eleven days. Anyone reading only the Cuti Penggal 1 line under-counted by one or two days.

The November catch that nobody flags

Deepavali falls on Sunday 8 November 2026, and is not a holiday in Sarawak.

Because Group A's weekend is Friday and Saturday, a Sunday festival lands on an ordinary school day in Kedah, Kelantan and Terengganu. In Group B states, it lands on the weekend. So the ministry's Lampiran C allocates the additional holiday differently:

  • Group A: Monday 9 November 2026.
  • Group B, all states except Sarawak: Tuesday 10 November 2026.
  • Sarawak alone: Monday 9 November 2026, listed as one day of KPM allocation.

That is the only festive adjustment left in the 2026 calendar. The Chinese New Year and Aidilfitri allocations above have both already been taken.

Separately, the ministry's CATATAN block names four festivals that fall inside a break and so need no adjustment at all: Hari Raya Aidilfitri on 21 and 22 March, inside Cuti Penggal 1; Pesta Kaamatan on 30 and 31 May, for Sabah and WP Labuan only, inside the mid-year break; Hari Gawai Dayak on 1 and 2 June, Sarawak only, also inside the mid-year break; and Christmas on 25 December, inside the year-end break. Aidilfitri is the one name that appears in both halves of Lampiran C, which is exactly why its extra days — one for Group A, two for Group B — are so easy to miss.

The 2027 calendar: both groups open on Monday 4 January

The ministry published the Kalendar Akademik Tahun 2027 in early October 2026. The PDF on moe.gov.my is stamped 2 October, and RTM carried the ministry's statement on 3 October. The grouping is unchanged: Group A is still Kedah, Kelantan and Terengganu, and Group B is everyone else.

One thing is new. In 2026 Group A opened a day early, on Sunday 11 January. In 2027 both groups open on the same day, Monday 4 January. The usual one-day offset comes back at every break after that, with Group A going on holiday first.

Group A (Kedah, Kelantan, Terengganu) in 2027

  • Term 1: 4 January to 4 March, 39 school days
  • Cuti Penggal 1: 5 to 13 March, 9 days
  • Term 1 continues: 14 March to 20 May, 43 school days
  • Cuti Pertengahan Tahun: 21 May to 5 June, 16 days
  • Term 2: 6 June to 26 August, 57 school days
  • Cuti Penggal 2: 27 August to 4 September, 9 days
  • Term 2 continues: 5 September to 2 December, 62 school days
  • Cuti Akhir Persekolahan: 3 to 31 December, 29 days

Group B (all other states and federal territories) in 2027

  • Term 1: 4 January to 5 March, 39 school days
  • Cuti Penggal 1: 6 to 14 March, 9 days
  • Term 1 continues: 15 March to 21 May, 45 school days
  • Cuti Pertengahan Tahun: 22 May to 6 June, 16 days
  • Term 2: 7 June to 27 August, 58 school days
  • Cuti Penggal 2: 28 August to 5 September, 9 days
  • Term 2 continues: 6 September to 3 December, 61 school days
  • Cuti Akhir Persekolahan: 4 to 31 December, 28 days

Add up the ministry's own JUMLAH HARI figures and the 2026 pattern flips: Group B sits 203 school days in 2027 and Group A 201.

The 2027 festival allocations

Lampiran C of the 2027 calendar allocates extra days for five festivals, against three in 2026. The ministry's statement says these extra days do not have to be made up.

  • Chinese New Year, Saturday 6 and Sunday 7 February. Group B gets five extra days: Friday 5 February, then Tuesday 9 to Friday 12 February. Kelantan and Terengganu get four, Monday 8 to Thursday 11 February. Kedah gets three, Tuesday 9 to Thursday 11 February. Monday 8 February is missing from the Kedah and Group B lists because it is expected to be a holiday there anyway: it is Awal Ramadan, a state holiday in Kedah and Johor, and the Sunday CNY day is expected to produce a substitute Monday (see our 2027 public holidays guide). Check your school's own takwim for that Monday.
  • Hari Raya Puasa, Wednesday 10 and Thursday 11 March. It falls inside Cuti Penggal 1 for both groups. Group A also gets Sunday 14 March, which would otherwise be its first school day back, so in practice both groups return on Monday 15 March.
  • Hari Raya Korban, Monday 17 May, with Tuesday 18 May as a second day in Kelantan and Terengganu only. Group A gets Sunday 16 and Wednesday 19 May, and Kedah also gets Tuesday 18 May. Group B gets Tuesday 18 and Wednesday 19 May.
  • Hari Wesak, Thursday 20 May. Group B gets Friday 21 May.
  • Deepavali, Thursday 28 October, not observed in Sarawak. Group A gets Wednesday 27 October. Group B, except Sarawak, gets Wednesday 27 and Friday 29 October. Sarawak alone gets Thursday 28 October.

May is where 2027 hides its longest break. Line the Raya Korban and Wesak days up against the mid-year break and every gap closes. Counting the festival days the calendar lists, Group A is away from Friday 14 May to Saturday 5 June and Group B from Saturday 15 May to Sunday 6 June: 23 days each, against the 16 the mid-year row advertises.

Deepavali becomes a long weekend. Group A is off from Wednesday 27 to Saturday 30 October, four days that run into its Friday-Saturday weekend. The rest of Group B is off from Wednesday 27 to Sunday 31 October, five days.

The CATATAN block again names four festivals that need no adjustment because they fall inside a break: Hari Raya Puasa (10 and 11 March, inside Cuti Penggal 1), Pesta Kaamatan (30 and 31 May, Sabah and WP Labuan only), Hari Gawai Dayak (1 and 2 June, Sarawak only), both inside the mid-year break, and Christmas (25 December, inside the year-end break).

What this means if you are booking anything

The one-day offset hands Group A the first travel day. Group A's year-end break starts on Friday 4 December 2026, a day before Group B's on Saturday 5 December. Both groups are on holiday together from 5 to 31 December. The same pattern repeats at every 2027 break, with Group A out a day earlier and back a day earlier.

The mid-term breaks are short, and the crowded window is shorter. Each is nine days, and the two groups overlap for eight of them. In 2027 those overlap windows are 6 to 13 March and 28 August to 4 September, the busiest dates for domestic flights, highland stays and theme parks.

December is the long one, and it is nearly a month. Twenty-eight days for Group A and 27 for Group B in 2026, with Christmas inside it. In 2027 it grows to 29 days for Group A and 28 for Group B.

January 2027 is now fixed. Both groups reopen on Monday 4 January 2027. The 2026 year-end break runs into the New Year weekend, so no child is back in class before that Monday.

Individual schools can add their own days. The ministry's calendar sets the national framework, and schools may still declare replacement or unscheduled holidays. Your child's own takwim is the final word on term dates.

Count the allocated days, not just the holiday rows. February and March both prove the point: the advertised break was shorter than the run of days children were actually away. The 2027 calendar repeats the trick in May, where the allocated days stretch a 16-day break into 23. Read Lampiran C before you price anything.

Related reads

*Cover image: CEphoto, Uwe Aranas, CC BY-SA 3.0, via Wikimedia Commons.*