สำหรับใช้ในการหาข้างขึ้นข้างแรมโดยจะประยุกต์สำหรับปี พ.ศ. 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 วัน
แนวทางเบื้องต้นนี้ ทำให้เราสามารถหาวันข้างขึ้น ข้างแรม ในแต่ละปีได้ วันข้างขึ้นวันข้างแรม บอกอะไรเราได้บ้าง
- เราสามารถหาปีนักษัตรไทย ได้
- เราสามารถหาวันพระเล็ก วันพระใหญ่ได้
- เราสามารถหาวันสำคัญทางพระพุทธศาสนา ว่าตรงกับวันไหนได้
แนวทางการประยุกต์เพิ่มเติม มีโอกาสจะมานำเสนอต่อไป