<html>
<head>
<title>農曆年與天干地支轉換程式</title>
<script>
/**
* 民國13年為甲子年,並不是民國1年為甲子年
*/
window.onload = function() {
document.getElementById('sl').checked = false;
}
var sky = ["", "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"];
var land = ["", "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"];
function sWord() {
let sw = sky[document.getElementById('s').value];
document.getElementById('sWord').innerText = typeof sw != 'undefined' ? sw : '';
}
function lWord() {
let lw = land[document.getElementById('l').value];
document.getElementById('lWord').innerText = typeof lw != 'undefined' ? lw : '';
}
/**
* 勾選天干地支的顯示隱藏
*/
function slCheck() {
let sl = document.getElementById('sl').checked;
let slView = document.getElementById('slView');
let lunarSolarYear = document.getElementById('lunarSolarYear');
if(sl) {
slView.style.display = 'block';
lunarSolarYear.style.display = 'none';
sWord();
lWord();
} else {
slView.style.display = 'none';
lunarSolarYear.style.display = 'block';
}
}
function display() {
var num = document.getElementById('num').value;
var sl = document.getElementById('sl').checked;
if(!sl) {
// 農曆年轉天干地支
if(num <= 0) {
alert('請輸入正確的農曆年');
return;
}
if(num.length > 3) {
alert('輸入的農曆年不可超過千年');
return;
}
num = subtract60(num);
if(num.length == 1) num = '0' + num;
var skyResult = Number(num[1])-2 <= 0 ? sky[Number(num[1])+10-2]: sky[Number(num[1])-2];
alert(skyResult + land[getLandWord(Number(num))] + '年');
} else {
// 天干地支轉農曆年
var s = document.getElementById('s').value;
var l = document.getElementById('l').value;
if(s > 10 || s <= 0) {
alert('天干必須在1~10之間');
return;
}
if(l > 12 || l <= 0) {
alert('地支必須在1~12之間');
return;
}
if((s % 2 == 1 && l % 2 == 0) || (s % 2 == 0 && l % 2 == 1)) {
alert('不正確的天干地支組合');
return;
}
var skyResult = Number(s) + 2;
if(skyResult >= 10) skyResult = skyResult - 10;
if(l.length == 1) l = '0' + l;
alert('農曆年為:' + getLandNumber(skyResult, l) + ' (或加減 60 的倍數)');
}
}
/**
* 取得地支數字
*/
function getLandNumber(sky, land) {
if(land.toString()[1] != sky) {
land = Number(land) + 12;
land = getLandNumber(sky, land)
}
return Number(land);
}
/**
* 取得地支文字
*/
function getLandWord(n){
if(n>12) n = getLandWord(n-12);
return n;
}
/**
* 將農曆年縮小到60年之內
*/
function subtract60(n){
if(n>60) n = subtract60(n-60);
return n.toString();
}
</script>
</head>
<body>
<h1>農曆年與天干地支轉換程式</h1>
是否使用天干地支轉農曆年<input type="checkbox" id="sl" onclick="slCheck()"><br />
<span id='lunarSolarYear'>請輸入農曆年:
<input type="number" id="num" style="width:70px" min='1' max='999' /><br />
</span>
<div id="slView" style='display:none'>
請輸入天干:<input type="number" id="s" style="width:70px" min='1' max='10' onchange="sWord()" />
<span id="sWord" style='color:blue'></span><br />
請輸入地支:<input type="number" id="l" style="width:70px" min='1' max='12' onchange="lWord()" />
<span id="lWord" style='color:blue'></span><br />
1=甲, 2=乙, 3=丙, 4=丁, 5=戊, 6=己, 7=庚, 8=辛, 9=壬, 10=癸<br />
1=子, 2=丑, 3=寅, 4=卯, 5=辰, 6=巳, 7=午, 8=未, 9=申, 10=酉, 11=戌, 12=亥<br />
</div>
<input type="button" value="確定" onclick="display()" />
</body>
</html>
※農曆(陰陽合曆)13、73年為甲子年
※農曆年轉天干地支:個位數-2為天干,一直減到12之內為地支
※天干地支轉農曆年: 天干+2為個位數,地支較麻煩,以戊戌年來說
戊為5,加2為7,所以個位數為7
戌為11,11加多少的個位數會是7(天干的結果),必須加6才行,但還必須是12的倍數才行,60以下12的倍數有12、24、36、48,所以只有36,結果為11+36=47