ถ้าเคยยื่นเอกสารราชการไม่ทันเพราะนึกว่าวันนั้นเปิดทำการ หรือรอเงินโอนเข้าบัญชีแล้วไม่มาทั้งที่ "วันนี้ไม่ใช่วันหยุด" สาเหตุที่พบบ่อยที่สุดคือประเทศไทยมีวันหยุดสองชุดที่ประกาศโดยคนละหน่วยงาน ซ้อนทับกันเกือบทั้งหมด แต่ต่างกันอยู่ไม่กี่วันต่อปี และวันที่ต่างกันเหล่านั้นคือจุดที่ระบบคำนวณวันครบกำหนด (due date), SLA หรือ "วันทำการถัดไป" ให้คำตอบผิด บทความนี้อธิบายว่าใครเป็นคนกำหนดแต่ละชุด ต่างกันตรงไหนบ้างในปี 2567–2570 และวิธีให้โค้ดคำนวณแทนด้วย API ที่ใช้ได้ฟรี

ใครกำหนดวันหยุดแต่ละชุด

วันหยุดราชการ กำหนดโดยมติคณะรัฐมนตรี ใช้กับหน่วยงานรัฐ โรงเรียนรัฐ และเป็นชุดที่บริษัทเอกชนส่วนใหญ่ใช้อ้างอิงเวลาจัดวันหยุดประจำปี ครม. ยังประกาศ "วันหยุดพิเศษ" เพิ่มได้เป็นครั้งคราว เช่น เพื่อให้มีวันหยุดยาวต่อเนื่อง

วันหยุดสถาบันการเงิน ประกาศโดยธนาคารแห่งประเทศไทย (ธปท.) ปีละครั้ง ใช้กับธนาคารพาณิชย์และสถาบันการเงินภายใต้การกำกับ ธปท. จะพิจารณาเองว่าจะตามวันหยุดพิเศษของ ครม. หรือไม่ บางปีตาม บางปีไม่ตาม และบางวันก็หยุดทั้งที่ราชการไม่หยุด

ผลคือไม่มีชุดใด "ถูกกว่า" อีกชุด แต่ละชุดถูกสำหรับงานของตัวเอง ถ้าเป็นเรื่องเงินเข้าบัญชี ให้ดูปฏิทินธนาคาร ถ้าเป็นกำหนดยื่นเอกสารกับหน่วยงานรัฐ ให้ดูปฏิทินราชการ

วันที่ต่างกันเป็นประจำ

จากข้อมูลที่เทียบกับประกาศ ธปท. และมติ ครม. แล้ว วันที่ต่างกันแบ่งได้เป็นสี่กลุ่ม

วันแรงงานแห่งชาติ (1 พฤษภาคม)

ธนาคารหยุด แต่ราชการไม่หยุด เป็นกรณีที่ทำให้ระบบที่ใช้ปฏิทินราชการคิดว่า 1 พ.ค. โอนเงินระหว่างธนาคารได้ตามปกติ ปี 2570 (2027) วันที่ 1 พ.ค. ตรงกับวันเสาร์ จึงมีวันชดเชยในวันจันทร์ที่ 3 พ.ค. ซึ่งตามประกาศ ธปท. ธนาคารหยุด

วันพืชมงคล

ราชการหยุด แต่ธนาคารเปิด วันนี้ยังพิเศษตรงที่กำหนดฤกษ์ปีต่อปี จึงไม่สามารถคำนวณล่วงหน้าได้

ปีวันพืชมงคล
2567 (2024)ศุกร์ 10 พ.ค.
2568 (2025)ศุกร์ 9 พ.ค.
2569 (2026)พุธ 13 พ.ค.
2570 (2027)ยังไม่ประกาศฤกษ์

วันเข้าพรรษา

ราชการหยุด ธนาคารเปิด เช่น ศุกร์ 11 ก.ค. 2568 และพฤหัสบดี 30 ก.ค. 2569 โดยวันอาสาฬหบูชาที่อยู่ก่อนหน้าหนึ่งวันหยุดทั้งสองฝ่าย

วันหยุดพิเศษตามมติ ครม. และวันชดเชย

กลุ่มนี้คาดเดายากที่สุดเพราะต้องดูเป็นรายปี

  • 12 เม.ย. 2567 และ 30 ธ.ค. 2567 ครม. ประกาศเป็นวันหยุดพิเศษ ราชการหยุด แต่ธนาคารเปิดตามปกติ
  • 16 เม.ย. 2568 วันชดเชยสงกรานต์ (13 เม.ย. ตรงกับวันอาทิตย์) ราชการหยุด แต่ธนาคารเปิด
  • 2 มิ.ย. 2568 และ 11 ส.ค. 2568 วันหยุดพิเศษที่ทั้งราชการและธนาคารหยุด
  • 2 ม.ค. 2569 วันหยุดพิเศษที่ทั้งคู่หยุด

จะเห็นว่า "วันหยุดพิเศษ" คำเดียวกัน ธนาคารตามบ้างไม่ตามบ้าง จึงไม่ควรเขียนกฎตายตัวในโค้ด แต่ควรอ่านจากข้อมูลที่อัปเดตตามประกาศ

ตัวอย่างที่เห็นผลต่างชัดเจน

สมมติวันนี้คือพฤหัสบดี 8 พ.ค. 2568 และสัญญาระบุว่าต้องชำระ "ภายใน 1 วันทำการ"

  • มุมราชการ ศุกร์ 9 พ.ค. เป็นวันพืชมงคล หยุด ข้ามเสาร์อาทิตย์ไปอีก วันทำการถัดไปคือ อังคาร 13 พ.ค. (ห่าง 5 วันปฏิทิน)
  • มุมธนาคาร 9 พ.ค. ธนาคารเปิด วันทำการถัดไปคือ ศุกร์ 9 พ.ค. (ห่าง 1 วันปฏิทิน)

ต่างกัน 4 วันจากวันหยุดวันเดียว ถ้าระบบของคุณต้องการให้แน่ใจว่า "ทุกฝ่ายทำงาน" วิธีที่ปลอดภัยที่สุดคือข้ามวันที่ฝ่ายใดฝ่ายหนึ่งหยุด ซึ่ง API ด้านล่างมี type=all ให้โดยตรง

ให้ API คำนวณแทน

endpoint ทั้งหมดอยู่ใต้ /api/v1/tools/thai/holidays รับพารามิเตอร์ type เป็น government, bank หรือ all (ค่าเริ่มต้น) รับปีทั้ง ค.ศ. และ พ.ศ. และรับวันที่ทั้ง YYYY-MM-DD และ D/M/พ.ศ. ไม่ต้องมี key ไม่จำกัดจำนวนครั้ง

ดูวันหยุดทั้งปี

Terminal
curl "https://reefsight.tech/api/v1/tools/thai/holidays?year=2569&type=bank"

ตอบรายการ days ที่แต่ละวันมี date, nameTh, nameEn, government, bank และฟิลด์เสริม substitutes (วันที่ชดเชยให้) หรือ special (วันหยุดพิเศษตามมติ ครม.) พร้อม source และ updatedAt บอกว่าข้อมูลเทียบกับประกาศฉบับไหนและแก้ล่าสุดเมื่อไร เมื่อกรอง type=bank วันพืชมงคลและวันเข้าพรรษาจะหายไป เมื่อกรอง type=government วันแรงงานจะหายไป

ถามวันเดียว

Terminal
curl "https://reefsight.tech/api/v1/tools/thai/holidays/1/5/2569?type=government"
json
{
  "data": {
    "date": "2026-05-01",
    "weekday": "ศุกร์",
    "holiday": false,
    "weekend": false,
    "businessDay": true,
    "type": "government"
  }
}

วันแรงงานในมุมราชการจึง holiday: false และ businessDay: true ส่วนวันเสาร์ที่ 11 เม.ย. 2569 จะได้ holiday: false แต่ weekend: true และ businessDay: false ทั้งสามฟิลด์แยกกันเพื่อให้โค้ดตัดสินใจได้โดยไม่ต้องตีความ

นับวันทำการถัดไป

Terminal
curl "https://reefsight.tech/api/v1/tools/thai/holidays/next-business-day?from=8/5/2568&days=1&type=government"
# → "date": "2025-05-13", "calendarDays": 5

curl "https://reefsight.tech/api/v1/tools/thai/holidays/next-business-day?from=8/5/2568&days=1&type=bank"
# → "date": "2025-05-09", "calendarDays": 1

อีกตัวอย่างคือศุกร์ 10 เม.ย. 2569 ก่อนสงกรานต์ ถ้าถาม days=1 จะข้ามเสาร์ อาทิตย์ และ 13–15 เม.ย. ไปได้พฤหัสบดี 16 เม.ย. (calendarDays: 6) ถ้าถาม days=3&type=bank จะนับ 16, 17 แล้วข้ามเสาร์อาทิตย์ไปจันทร์ 20 เม.ย. days รับ 1 ถึง 366 และไม่นับวันเริ่มต้นเอง

จาก JavaScript บนเว็บไซต์ของคุณเรียกตรงได้ เพราะ API ส่ง CORS header

js
const url = new URL("https://reefsight.tech/api/v1/tools/thai/holidays/next-business-day");
url.searchParams.set("from", "2026-04-10");
url.searchParams.set("days", "3");
url.searchParams.set("type", "all");
const {data} = await fetch(url).then((r) => r.json());
console.log(data.date, data.thaiLong); // "2026-04-20" "วันจันทร์ที่ 20 เมษายน พ.ศ. 2569"

ปฏิทิน .ics

/api/v1/tools/thai/holidays.ics ให้ subscribe ใน Google Calendar, Apple Calendar หรือ Outlook ได้ ถ้า subscribe โดยไม่ระบุ year ปฏิทินจะดึงปีใหม่มาเองเมื่อมีการเพิ่มไฟล์ ตามรอบ refresh ของแอป (Google ราว 1 วัน)

ข้อมูลครอบคลุมแค่ไหน

  • ปี 2567–2569 (2024–2026) ครบทั้งราชการและธนาคาร ทุกรายการเทียบกับประกาศ ธปท. และมติ ครม. แล้ว (ตรวจ 6 ต.ค. 2569)
  • ปี 2570 (2027) มีเฉพาะที่ ธปท. ประกาศแล้ว คือวันหยุดธนาคาร 18 วันตามประกาศ ธปท. ที่ 37/2569 (ราชกิจจานุเบกษา 25 ส.ค. 2569) วันหยุดราชการใช้รายการเดียวกันไปก่อนจนกว่า ครม. จะประกาศวันหยุดพิเศษ และวันพืชมงคล 2570 ยังไม่ประกาศฤกษ์
  • ปีที่ไม่มีข้อมูล ตอบ 404 not_available พร้อมบอกช่วงปีที่มี ไม่เดาวันหยุดให้ รวมถึงกรณีนับวันทำการข้ามไปปีที่ไม่มีข้อมูล เช่น from=2027-12-30&days=5 ก็ได้ 404 แทนที่จะสมมติว่าปีหน้าไม่มีวันหยุด

ข้อควรระวัง

  • ไม่รวมวันหยุดตลาดหลักทรัพย์ วันหยุดเฉพาะจังหวัด (เช่น วันตรุษจีนหรือวันฮารีรายอในบางจังหวัดภาคใต้) และวันหยุดของบริษัท ถ้าระบบของคุณต้องการชุดเหล่านี้ต้องเพิ่มเอง
  • รายการที่ติดป้าย unverified ใส่จากรายงานรองและยังไม่ได้เทียบประกาศต้นฉบับ ถ้าใช้กับงานที่ผิดไม่ได้ ให้ตรวจกับต้นทางก่อน วันที่แก้ข้อมูลล่าสุดแสดงไว้ใน updatedAt ทุก response
  • เสาร์อาทิตย์ถือว่าไม่ใช่วันทำการเสมอ next-business-day ไม่มีตัวเลือกสำหรับธุรกิจที่เปิดวันเสาร์
  • ปีหน้าไม่ได้มาเอง ข้อมูลเพิ่มเมื่อ ครม. และ ธปท. ประกาศ (ปกติปลายปี) ระบบที่นับข้ามปีควรรองรับ 404 และแจ้งผู้ใช้ แทนที่จะคำนวณต่อด้วยข้อมูลที่ไม่มี
  • response cache ได้ 1 ชั่วโมง (.ics 1 วัน) ถ้าเพิ่งมีประกาศวันหยุดพิเศษ อาจเห็นช้ากว่าเวลาที่เราแก้ข้อมูลเล็กน้อย

คำถามที่พบบ่อย

ควรใช้ type ไหนคำนวณ due date all ปลอดภัยสุดเพราะข้ามวันที่ฝ่ายใดฝ่ายหนึ่งหยุด ถ้าเป็นเรื่องเงินเข้าบัญชีโดยเฉพาะใช้ bank ถ้าเป็นกำหนดยื่นเอกสารราชการใช้ government

ทำไมบางปีไม่มีวันพืชมงคลในรายการ วันพืชมงคลกำหนดฤกษ์ปีต่อปี เราใส่เมื่อประกาศแล้วเท่านั้น และเป็นวันหยุดราชการอย่างเดียว ปี 2570 จึงยังไม่มี

เอาข้อมูลไปใช้ offline ได้ไหม ได้ เรียก /holidays?year= ทีละปีแล้วเก็บไว้ ข้อมูลเล็กมาก (ราว 20 วันต่อปี) และมี updatedAt ให้เทียบว่าสำเนาของคุณเก่ากว่าหรือไม่

ดูปฏิทินเต็มและลองคำนวณ

หน้า reefsight.tech › thai-holidays แสดงปฏิทินรายเดือนที่แรเงาวันหยุดราชการและธนาคารคนละสี กดวันเพื่อดูชื่อและที่มา มีเครื่องคิด "วันนี้ + N วันทำการ" และปุ่มเพิ่มลง Google/Apple Calendar ด้วย .ics จริง ทั้งหมดใช้ API ตัวเดียวกับที่คุณเรียกได้เอง ฟรีและไม่ต้องสมัคร

คุยกับทีม Reefsight