สำหรับใช้ในการหาข้างขึ้นข้างแรมโดยจะประยุกต์สำหรับปี พ.ศ. 2500 - พ.ศ. 2600
เราไม่สามารถหาวันข้างขึ้น หรือวันข้างแรม จากปฏิทินปกติได้ สำหรับการหาวันข้างขึ้น วันข้างแรม เราจำเป็นต้องใช้ปฏิทินจันทรคติไทย ซึ่งสามารถนับวันสำคัญทางพุทธศาสนา และวันข้างขึ้นข้างแรมได้ สามารถค้นหาที่มาที่ไป และความหมายของปฏิทินจันทรคดิไทยได้เพิ่มเติม
ปีปฏิทินไทย
ปีปฏิทินไทย จะแบ่งออกได้เป็น 3 แบบ คือ- แบบปกติ มี 12 เดือน
- ปีอธิกมาส มี 13 เดือน มีเดือนพิเศษแทรก ระหว่างเดือน 7 กับ เดือน 8 เรียกว่า เดือน 8 หนแรก เพิ่ม 30 วัน
- ปีอธิกวาร มี 12 เดือน แต่มีวัน แรม 15 ค่ำ เดือน 7 เพิ่มเข้ามา 1 วัน
จำนวนวันของปีแต่ละแบบในปฏิทินไทย
การนับปีทางจันทรคติ นับตามเวลาการโคจรของดวงจันทร์รอบโลก 1 รอบ ใช้เวลา 29 วัน ครึ่ง ถ้านับ 29 วัน ก็จะขาดไป 12 ชั่วโมง ดังนั้น จึงนับ 2 เดือนเป็น 59 วัน โดยเริ่มนับเดือนคี่ให้มี 29 วัน และเดือนคู่ ให้มี 30 วัน สลับไปจนครบ 12 เดือน ก็จะได้วันของปีปกติเท่ากับ 59 * 6 เท่ากับ 354 วัน ดังนั้น ปีแต่ละแบบ ก็จะมีจำนวนวันเป็นดังนี้คือ- ปีปกติ มี 12 เดือน มี 354 วัน
- ปีอธิกมาส มี 13 เดือน มีเพิ่ม 1 เดือน 30 วัน ก็จะมีวันทั้งหมด 384 วัน
- ปีอธิวาร มี 12 เดือน แต่มีวันเพิ่มมา 1 วันในเดือน 7 ก็จะมีวันทั้งหมด 355 วัน
วิธีการหาปีอธิกมาส ปีอธิกวาร
สำหรับวิธีการคำนวณหาปีอธิกมาส ปีอธิกวาร ในที่นี้ผู้เขียนได้แนวทางจากยูทูปช่อง Loy Academyเกี่ยวกับเรื่องปฏิทินไทย แต่ก็ไม่สามารถเข้าใจเนื้อหาทั้งหมด จึงได้มาแค่สูตรการหาปีที่เป็นปี อธิกมาส หรือปีที่มีเดือน 8 สองหน อย่างไรก็ตาม ถ้าใครสามารถทำการแปลงหรือประยุกต์หาปีอธิกวารได้ ก็สามารถปรับประยุกต์เพิ่มเติมได้ ในที่นี้จะใช้ปี อธิกวาร จากค่าที่มีอยู่แล้ว หรือค่าที่ได้จากการคำนวณมาแล้ว จากแหล่งข้อมูลอื่นมาใช้
วิธีการหาวันข้างขึ้นข้างแรม
ในแต่ละเดือนจะมีข้างขึ้น และข้างแรม ในรูปแบบดังนี้คือ ในทุกเดือน จะมี ข้างขึ้น 1 ค่ำ ถึง 15 ค่ำ ส่วนข้างแรม เดือนคี่จะมี ถึงแค่ แรม 14 ค่ำ ส่วนเดือนคู่ จะมีถึงแรม 15 ค่ำ แต่ก็มีเงื่อนไข ตามปี ที่ได้กล่าวมาตอนต้น เพราะมีวันเพิ่มขึ้น แต่รูปแบบการเปลี่ยนแปลงก็ไม่ได้เปลี่ยนไปมากนัก คือ ปีอธิวาร เดือน 7 เป็นเดือนคี่ แต่จะมีแรม 15 ค่ำด้วย นอกนั้นก็ยืดตามเดือนคี่ เดือนคู่ปกติการนับเริ่มปฏิทินไทย จะเริ่มนับตั้งแต่วัน ขึ้น 1 ค่ำเดือน 1 หรือที่เรียกว่า เดือนอ้าย ซึ่งก็แสดงว่า เป็นวันหลังจากวัน แรม 15 ค่ำ เดือน 12 การที่เราจะสร้างปฏิทิน เพื่อหาวันข้างขึ้นข้างแรม จึงจำเป็นต้องมีวันเริ่มต้นก่อน เมื่อเราย้อนปฏิทินเก่า เพื่อดูวันขึ้น 1 ค่ำ เดือน 1 ของปี 2500 ก็จะได้เป็นวันที่
3 ธันวาคม 2499 หรือในรูปแบบมาตรฐานคือ 1956-12-03
เราได้ข้อมูลครบ พร้อมสำหรับการหาวันข้างขึ้นข้างแรม แล้ว ได้แก่
- วันขึ้น 1 ค่ำ เดือน 1 ของปี 2500 คือ 1956-12-03
- ปีอธิกวาร จากข้อมูลสุดท้ายแล้ว
$arr_atikawan_y = [2500,2506,2513,2516,2522,2530,2533,2540,2543,2549,2552,2559,2563,2568,2575,2578,2586,2589,2595];
- สูตรการหาปีอธิกมาส
<?php $year = "2021"; $is_atikamas = (fmod((($year - 78) - 0.45222),2.7118886)<1)?1:0; echo $is_atikamas; // เท่ากับ 1 เป็นปี อธิกมาส ?>
การหาวันข้างขึ้น ข้างแรม เป็นการวนลูปข้อมูล วันเริ่มต้น แล้วสร้างปฏิทินขึ้นมา ดังนั้น ถ้าเราจะหาข้อมูลของปี 2021 เราก็ต้องวนลูปปีตั้งแต่ 1957 (2500) มาจนถึง 2021 (2564)
<?php $_begin_thai_date = "1956-12-03"; $arr_atikawan_y = [2500,2506,2513,2516,2522,2530,2533,2540,2543,2549,2552,2559,2563,2568,2575,2578,2586,2589,2595]; $_begin_year = 1957; $_check_year = 2021; // ปีที่จะหาข้อมูล for($i = $_begin_year; $i <= $_check_year; $i++){ $is_atikamas = (fmod((($i - 78) - 0.45222),2.7118886)<1)?1:0; $is_atikawan = (in_array(($i+543),$arr_atikawan_y))?1:0; $day_in_year = 354; $day_in_year = ($is_atikamas==1)?384:$day_in_year; $day_in_year = ($is_atikawan==1)?355:$day_in_year; echo $i." - ".$day_in_year."<br>"; } ?>
คำสั่งนี้เราจะได้รูปแบบผลลัพธ์ เป็นปี ค.ศ. และ จำนวนวันในปีนั้น ตัวอย่าง 3 ปีสุดท้าย
2019 - 354 2020 - 355 2021 - 384
ต่อไป เมื่อเรารู้วันขึ้น 1 ค่ำ เดือน 1 เริ่มต้น เราก็สามารถ หาวันขึ้น 1 คำ เดือน 1 ของปีถัดไป จากการบวกจำนวนวันของปีนั้นๆ
<?php $_begin_thai_date = "1956-12-03"; $arr_atikawan_y = [2500,2506,2513,2516,2522,2530,2533,2540,2543,2549,2552,2559,2563,2568,2575,2578,2586,2589,2595]; $_begin_year = 1957; $_check_year = 2021; // ปีที่จะหาข้อมูล $day_add = 0; // วันที่เพิ่มแต่ละปี for($i = $_begin_year; $i <= $_check_year; $i++){ $is_atikamas = (fmod((($i - 78) - 0.45222),2.7118886)<1)?1:0; $is_atikawan = (in_array(($i+543),$arr_atikawan_y))?1:0; $day_in_year = 354; $day_in_year = ($is_atikamas==1)?384:$day_in_year; $day_in_year = ($is_atikawan==1)?355:$day_in_year; // วันขึ้น 1 ค่ำ เดือน 1 ของแต่ละปี $begin_buddhist_day_of_year = date("Y-m-d",strtotime($_begin_thai_date." +$day_add day")); // $day_add+= $day_in_year; // เพิ่มวันแต่ละปี echo $i." - ".$day_in_year." - ".$begin_buddhist_day_of_year."<br>"; } ?>
คำสั่งนี้จะได้ผลลัพธ์ วันขึ้น 1 เดือน 1 ของปีนั้นๆ ตัวอย่าง 3 ปีล่าสุด
2019 - 354 - 2018-12-08 2020 - 355 - 2019-11-27 2021 - 384 - 2020-11-16
จะเห็นว่าเดือน 1 ของปฏิทินไทย จะเป็นของปีก่อนหน้า
ต่อไปก็เป็นขั้นตอนการวนลูปวันของแต่ละเดือน สร้างวันขึ้น วันแรมของเดือนนั้นๆ ใน 1 ปีปฏิทิน ตามเงื่อนไข
<?php $_begin_thai_date = "1956-12-03"; $arr_atikawan_y = [2500,2506,2513,2516,2522,2530,2533,2540,2543,2549,2552,2559,2563,2568,2575,2578,2586,2589,2595]; $_begin_year = 1957; $_check_year = 2021; // ปีที่จะหาข้อมูล $day_add = 0; // วันที่เพิ่มแต่ละปี for($i = $_begin_year; $i <= $_check_year; $i++){ $is_atikamas = (fmod((($i - 78) - 0.45222),2.7118886)<1)?1:0; $is_atikawan = (in_array(($i+543),$arr_atikawan_y))?1:0; $day_in_year = 354; $day_in_year = ($is_atikamas==1)?384:$day_in_year; $day_in_year = ($is_atikawan==1)?355:$day_in_year; // วันขึ้น 1 ค่ำ เดือน 1 ของแต่ละปี $begin_buddhist_day_of_year = date("Y-m-d",strtotime($_begin_thai_date." +$day_add day")); // $day_add+= $day_in_year; // เพิ่มวันแต่ละปี // echo $i." - ".$day_in_year." - ".$begin_buddhist_day_of_year."<br>"; $c_day = 0; // นับวัน $c_month = 0; // นับเดือน $c_u_day = 0; // นับวันขึ้น $c_d_day = 0; // นับวันแรม $current_month = 1; // เดือนเริ่มต้น $day_in_month = 0; // วันในแต่ละเดือน $month_in_year = 12; // เดือนใน 1 ปี $double_month = false; // เดือน 8 สองหนหรือไม่ $month_in_year = ($is_atikamas==1)?13:$month_in_year; // มี 13 เดือน if($i==$_check_year){ // วนลูปเฉพาะปีที่จะดู for($v = 0; $v < ($day_in_year+60); $v++){ // วนลุป วันในปีนั้นๆ +เพิ่มวันเพื่อให้ข้ามปี $c_day++; $final_d_day = ($current_month%2==1)?14:15; $final_d_day = ($is_atikawan==1 && $current_month==7)?15:$final_d_day; if($c_d_day==$final_d_day){ // ถึงวันแรมสุดท้ายของเดือน เริ่มเดือนใหม่ $current_month++; if($current_month==13){ // เข้าปีปฏิทินไทยใหม่ นับเดือนใหม่ $current_month = 1; } // ปีที่มีแปด 2 หน if($is_atikamas && $current_month==9 && $double_month==false){ $current_month--; $double_month = true; } $c_u_day = 0; $c_d_day = 0; } if($c_u_day<15){ // นับวันข้างขึ้น $c_u_day++; }else{ if($c_d_day<$final_d_day){ // นับวันข้างแรม $c_d_day++; } } // แสดงวันที่ในปฏิทิน echo date("Y-m-d",strtotime($begin_buddhist_day_of_year."+ $v day"))." - "; // แสดงวันข้างขื้น หรือข้างแรม if($c_d_day>0){ echo "แรม $c_d_day ค่ำ เดือน $current_month "."<br>"; }else{ echo "ขึ้น $c_u_day ค่ำ เดือน $current_month "."<br>"; } } } } ?>
ในตัวอย่าง เราหาข้อมูลของปี 2021 จะได้ผลลัพธ์ ตัวอย่าง ดังนี้
2021-11-30 - แรม 11 ค่ำ เดือน 12 2021-12-01 - แรม 12 ค่ำ เดือน 12 2021-12-02 - แรม 13 ค่ำ เดือน 12 2021-12-03 - แรม 14 ค่ำ เดือน 12 2021-12-04 - แรม 15 ค่ำ เดือน 12 2021-12-05 - ขึ้น 1 ค่ำ เดือน 1 2021-12-06 - ขึ้น 2 ค่ำ เดือน 1 2021-12-07 - ขึ้น 3 ค่ำ เดือน 1 2021-12-08 - ขึ้น 4 ค่ำ เดือน 1
ข้อมูลตัวอย่างผลลัพธ์จริงจะแสดงกว่า 300 วัน
แนวทางเบื้องต้นนี้ ทำให้เราสามารถหาวันข้างขึ้น ข้างแรม ในแต่ละปีได้ วันข้างขึ้นวันข้างแรม บอกอะไรเราได้บ้าง
- เราสามารถหาปีนักษัตรไทย ได้
- เราสามารถหาวันพระเล็ก วันพระใหญ่ได้
- เราสามารถหาวันสำคัญทางพระพุทธศาสนา ว่าตรงกับวันไหนได้
แนวทางการประยุกต์เพิ่มเติม มีโอกาสจะมานำเสนอต่อไป