Thai does not run one to twelve twice and label the halves. It cuts the day into blocks and gives each block its own word, and that word sits next to the number rather than after the whole time. The block word is doing the job am and pm do, but it is doing it from inside the phrase.
This looks like four unrelated systems until you learn where the words came from, at which point it becomes one system with a very clear logic.
The words are instruments
ตี is the verb 'to strike'. ตีสอง is not 'two in the morning', it is 'struck twice': the night watchman's drum, counting out the small hours.
ทุ่ม is the sound of that drum in the evening hours. โมง is a gong. So the Thai clock is a record of how time was announced before anyone owned a clock: a gong through the day, a drum through the night, and you counted the strikes.
That is why the numbers reset. They were never running to twelve. They were counting strikes since the last change of instrument.
- ตีสองtiː sɔ̌ːŋ
2am
literally 'struck two'
- เจ็ดโมงเช้าtɕèt moːŋ tɕʰáːw
7am
seven gongs, morning
- บ่ายสองโมงbàːj sɔ̌ːŋ moːŋ
2pm
afternoon block, so the count restarts
- สองทุ่มsɔ̌ːŋ tʰûm
8pm
two drums into the evening
What you actually need
เที่ยง is noon and ครึ่ง is the half hour, and between them they cover a great deal of ordinary arrangement. ดึก is late at night as a description rather than a time.
And there is a parallel system: the 24-hour clock, read with นาฬิกา, used on transport timetables, in the army and in anything official. You will hear both in one day. Learn the block system to speak and the 24-hour one to read a bus ticket.
- เที่ยงtʰîːaŋ
noon
- ครึ่งkʰrɯ̂ŋ
half past
goes after the hour
- ดึกdɯ̀k
late at night