사주팔자 김선생 사주 보는 앱을 만들려면 음력 양력 변환 알고리즘이 필요합니다. 사용자가 음력은 알고 찾아서 일일이 양력으로 변환해서 입력해야 하는 번거로움을 없애기 위해 음력을 양력으로 변환해주는 함수를 만들었습니다.
함수 인수에 0을 넣으면 평달, 1을 넣으면 윤달이고 윤달 아닌날에 1을 넣어도 평달로 표기가 되게 했습니다.
function gf_Lun2Sun($GF_YEAR , $GF_MONTH , $GF_DAY , $GF_YOUN = 0 ){
// 음력 데이터 (평달 - 작은달 :1, 큰달:2 )
// (윤달이 있는 달 - 평달이 작고 윤달도 작으면 :3 , 평달이 작고 윤달이 크면 : 4)
// (윤달이 있는 달 - 평달이 크고 윤달이 작으면 :5, 평달과 윤달이 모두 크면 : 6)
$lunarMonthTable = array(
array(1, 2, 4, 1, 1, 2, 1, 2, 1, 2, 2, 1), /* 1841 */
array(2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1),
array(2, 2, 2, 1, 2, 1, 4, 1, 2, 1, 2, 1),
array(2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1),
array(2, 1, 2, 1, 5, 2, 1, 2, 2, 1, 2, 1),
array(2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1),
array(2, 1, 2, 3, 2, 1, 2, 1, 2, 1, 2, 2),
array(2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2),
array(2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 5, 2), /* 1851 */
array(2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2),
array(2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 1, 2, 5, 2, 1, 2, 1, 2),
array(1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1),
array(2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2),
array(1, 2, 1, 1, 5, 2, 1, 2, 1, 2, 2, 2),
array(1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2),
array(2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2),
array(2, 1, 6, 1, 1, 2, 1, 1, 2, 1, 2, 2),
array(1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2), /* 1861 */
array(2, 1, 2, 1, 2, 2, 1, 2, 2, 3, 1, 2),
array(1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2),
array(1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 1, 2, 4, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2),
array(1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2),
array(1, 2, 2, 3, 2, 1, 1, 2, 1, 2, 2, 1),
array(2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 2, 2, 1, 2, 1, 2, 1, 1, 5, 2, 1),
array(2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2), /* 1871 */
array(1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2),
array(1, 1, 2, 1, 2, 4, 2, 1, 2, 2, 1, 2),
array(1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1),
array(2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1),
array(2, 2, 1, 1, 5, 1, 2, 1, 2, 2, 1, 2),
array(2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2),
array(2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 2, 4, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2),
array(1, 2, 1, 2, 1, 2, 5, 2, 2, 1, 2, 1), /* 1881 */
array(1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2),
array(1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 2),
array(2, 1, 1, 2, 3, 2, 1, 2, 2, 1, 2, 2),
array(2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2),
array(2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2),
array(2, 2, 1, 5, 2, 1, 1, 2, 1, 2, 1, 2),
array(2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2),
array(1, 5, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2), /* 1891 */
array(1, 1, 2, 1, 1, 5, 2, 2, 1, 2, 2, 2),
array(1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2),
array(1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2),
array(2, 1, 2, 1, 5, 1, 2, 1, 2, 1, 2, 1),
array(2, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2),
array(1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1),
array(2, 1, 5, 2, 2, 1, 2, 1, 2, 1, 2, 1),
array(2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 2, 5, 2, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1), /* 1901 */
array(2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2),
array(1, 2, 1, 2, 3, 2, 1, 1, 2, 2, 1, 2),
array(2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1),
array(2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2),
array(1, 2, 2, 4, 1, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1),
array(2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2),
array(1, 5, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1),
array(2, 1, 2, 1, 1, 5, 1, 2, 2, 1, 2, 2), /* 1911 */
array(2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2),
array(2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2),
array(2, 2, 1, 2, 5, 1, 2, 1, 2, 1, 1, 2),
array(2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1),
array(2, 3, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1),
array(2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 5, 2, 2, 1, 2, 2),
array(1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2),
array(2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2), /* 1921 */
array(2, 1, 2, 2, 3, 2, 1, 1, 2, 1, 2, 2),
array(1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2),
array(2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1),
array(2, 1, 2, 5, 2, 1, 2, 2, 1, 2, 1, 2),
array(1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2),
array(1, 5, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2),
array(1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2),
array(1, 2, 2, 1, 1, 5, 1, 2, 1, 2, 2, 1),
array(2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1), /* 1931 */
array(2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2),
array(1, 2, 2, 1, 6, 1, 2, 1, 2, 1, 1, 2),
array(1, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2),
array(1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 4, 1, 2, 1, 2, 1, 2, 2, 2, 1),
array(2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1),
array(2, 2, 1, 1, 2, 1, 4, 1, 2, 2, 1, 2),
array(2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2), /* 양력 1940년 1월은 음력 1939년에 있음 그래서 시작년도는 1939년*/
array(2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 2, 1, 2, 2, 4, 1, 1, 2, 1, 2, 1), /* 1941 */
array(2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2),
array(1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2),
array(1, 1, 2, 4, 1, 2, 1, 2, 2, 1, 2, 2),
array(1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 2),
array(2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2),
array(2, 5, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2),
array(2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2),
array(2, 2, 1, 2, 1, 2, 3, 2, 1, 2, 1, 2),
array(2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2), /* 1951 */
array(1, 2, 1, 2, 4, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 2),
array(1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2),
array(2, 1, 4, 1, 1, 2, 1, 2, 1, 2, 2, 2),
array(1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2),
array(2, 1, 2, 1, 2, 1, 1, 5, 2, 1, 2, 2),
array(1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2),
array(1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1),
array(2, 1, 2, 1, 2, 5, 2, 1, 2, 1, 2, 1),
array(2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2), /* 1961 */
array(1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 2, 3, 2, 1, 2, 1, 2, 2, 2, 1),
array(2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2),
array(1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 2),
array(1, 2, 5, 2, 1, 1, 2, 1, 1, 2, 2, 1),
array(2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2),
array(1, 2, 2, 1, 2, 1, 5, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1),
array(2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2),
array(1, 2, 1, 1, 5, 2, 1, 2, 2, 2, 1, 2), /* 1971 */
array(1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1),
array(2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1),
array(2, 2, 1, 5, 1, 2, 1, 1, 2, 2, 1, 2),
array(2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2),
array(2, 2, 1, 2, 1, 2, 1, 5, 2, 1, 1, 2),
array(2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1),
array(2, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1),
array(2, 1, 1, 2, 1, 6, 1, 2, 2, 1, 2, 1),
array(2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2),
array(1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2), /* 1981 */
array(2, 1, 2, 3, 2, 1, 1, 2, 2, 1, 2, 2),
array(2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2),
array(2, 1, 2, 2, 1, 1, 2, 1, 1, 5, 2, 2),
array(1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2),
array(1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1),
array(2, 1, 2, 2, 1, 5, 2, 2, 1, 2, 1, 2),
array(1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2),
array(1, 2, 1, 1, 5, 1, 2, 1, 2, 2, 2, 2),
array(1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2), /* 1991 */
array(1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2),
array(1, 2, 5, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2),
array(1, 2, 2, 1, 2, 2, 1, 5, 2, 1, 1, 2),
array(1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2),
array(1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 1, 2, 3, 2, 2, 1, 2, 2, 2, 1),
array(2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1),
array(2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1),
array(2, 2, 2, 3, 2, 1, 1, 2, 1, 2, 1, 2), /* 2001 */
array(2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2),
array(1, 5, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1),
array(2, 1, 2, 1, 2, 1, 5, 2, 2, 1, 2, 2),
array(1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 2),
array(2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2),
array(2, 2, 1, 1, 5, 1, 2, 1, 2, 1, 2, 2),
array(2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2),
array(2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1), /* 2011 */
array(2, 1, 6, 2, 1, 2, 1, 1, 2, 1, 2, 1),
array(2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2),
array(1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1),
array(2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2),
array(2, 1, 1, 2, 3, 2, 1, 2, 1, 2, 2, 2),
array(1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2),
array(2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2),
array(2, 1, 2, 5, 2, 1, 1, 2, 1, 2, 1, 2),
array(1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1), /* 2021 */
array(2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2),
array(1, 5, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1),
array(2, 1, 2, 1, 1, 5, 2, 1, 2, 2, 2, 1),
array(2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2),
array(1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 2),
array(1, 2, 2, 1, 5, 1, 2, 1, 1, 2, 2, 1),
array(2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2),
array(1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1),
array(2, 1, 5, 2, 1, 2, 2, 1, 2, 1, 2, 1), /* 2031 */
array(2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 5, 2),
array(1, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1),
array(2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2),
array(2, 2, 1, 2, 1, 4, 1, 1, 2, 2, 1, 2),
array(2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2),
array(2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1),
array(2, 2, 1, 2, 5, 2, 1, 2, 1, 2, 1, 1),
array(2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1),
array(2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 2), /* 2041 */
array(1, 5, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2),
array(1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2));
$gan = Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
$jee =Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
$ddi = Array("쥐","소","범","토끼","용","뱀","말","양","원숭이","닭","개","돼지");
$week = Array("일","월","화","수","목","금","토");
// 양력의 달마다의 일수
$md = array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$year = $GF_YEAR;
$month = $GF_MONTH;
$day = $GF_DAY;
$w = $GF_WEEK;
$y1 = $year - 1841;
$m1 = $month - 1;
$leapyes = 0;
if ($lunarMonthTable[$y1][$m1] > 2) {
if ($GF_YOUN >= 1) {
$leapyes = 1;
switch ($lunarMonthTable[$y1][$m1]) {
case 3:
case 5:
$mm = 29;
break;
case 4:
case 6:
$mm = 30;
break;
}
} else {
switch ($lunarMonthTable[$y1][$m1]) {
case 1:
case 3:
case 4:
$mm = 29;
break;
case 2:
case 5:
case 6:
$mm = 30;
break;
}
}
}
$lday = $day;
$td = 0;
for ($i=0; $i<$y1; $i++) {
for ($j=0; $j<12; $j++) {
switch ($lunarMonthTable[$i][$j]) {
case 1:
$td = $td + 29;
break;
case 2:
$td = $td + 30;
break;
case 3:
$td = $td + 58; // 29+29
break;
case 4:
$td = $td + 59; // 29+30
break;
case 5:
$td = $td + 59; // 30+29
break;
case 6:
$td = $td + 60; // 30+30
break;
}
}
}
for ($j=0; $j<$m1; $j++) {
switch ($lunarMonthTable[$y1][$j]) {
case 1:
$td = $td + 29;
break;
case 2:
$td = $td + 30;
break;
case 3:
$td = $td + 58; // 29+29
break;
case 4:
$td = $td + 59; // 29+30
break;
case 5:
$td = $td + 59; // 30+29
break;
case 6:
$td = $td + 60; // 30+30
break;
}
}
if ($leapyes == 1) {
switch($lunarMonthTable[$y1][$m1]) {
case 3:
case 4:
$td = $td + 29;
break;
case 5:
case 6:
$td = $td + 30;
break;
}
}
$td = $td + $lday + 22;
// td : 1841 년 1 월 1 일 부터 원하는 날짜까지의 전체 날수의 합
$y1 = 1840;
do {
$y1 = $y1 +1;
if (($y1 % 400 == 0) || (($y1 % 100 != 0) && ($y1 % 4 == 0))) {
$y2 = 366;
}
else {
$y2 = 365;
}
if ($td <= $y2) {
break;
}
else {
$td = $td- $y2;
}
} while(1);
$syear = $y1;
$md[1] = $y2 - 337;
$m1 = 0;
do {
$m1= $m1 + 1;
if ($td <= $md[$m1 - 1]) {
break;
}
else {
$td = $td - $md[$m1 - 1];
}
} while(1);
$smonth = $m1;
$sday = $td;
$y = $syear -1;
$td = $y * 365 + $y/4 - $y/100 + $y/400;
for ($i=0; $i<$smonth-1; $i++) {
$td = $td + $md[i];
}
$w = $td % 7;
$k1 = ($lyear + 6) % 10;
$k2 = ($lyear + 8) % 12;
if($smonth < 10){
$smonth = "0" + $smonth;
}
if($sday < 10){
$sday = "0" + $sday;
}
return $syear.$smonth.$sday;
//console.log(lunaDate+" => 양력 휴일 변환: "+smonth+"월"+sday+"일");
}
//YYY, mm, dd, 0은 평달 1은 윤달 윤달을 체크하고 날짜를 검색해도 평달로 표기가 됩니다.
echo gf_Lun2Sun(2023, 02, 03, 1);
양력을 음력으로 변환해주는 함수 윤달 표시 가능 php (0) | 2022.12.05 |
---|---|
2023년 손없는 날과 집수리, 이사, 이장, 수의 좋은날 윤달 정리 (0) | 2022.12.04 |
알고 보는 사주 팔자 서머타임과 한국 표준시 (0) | 2022.12.02 |
사주에서 태어난 시각 정확하게 계산하기 (0) | 2022.11.13 |