关于农历天干地支的算法

大可山人
博客专家认证
2006-05-26 12:07:07
比如:在下拉菜单中选项从1920至2020年中选择某一年(比如2007年),则在二级联动下拉菜单中显示相应年的农历年(比如乙亥年等)。
...全文
658 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
重典 2007-01-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/chsword/archive/2007/01/06/1475345.aspx
大可山人 2006-06-02
  • 打赏
  • 举报
回复
chinank 2006-06-02
  • 打赏
  • 举报
回复
var gdCtrl = new Object();
var goSelectTag = new Array();
var gcGray = "#808080";
var gcToggle = "#FFFF00";
var gcred = "#FF0000";
var gcBG = "#F8F9EE";
var gcGreen = "#00FF00"

var gdCurDate = new Date();
var giYear = gdCurDate.getFullYear();
var giMonth = gdCurDate.getMonth()+1;
var giDay = gdCurDate.getDate();

function fSetDate(iYear, iMonth, iDay){
gdCtrl.value = iYear+"-"+iMonth+"-"+iDay;
}

function fSetSelected(aCell){
var iOffset = 0;
var iYear =parseInt(tbSelYear.value);//动态改变文本框的年
var iMonth = parseInt(tbSelMonth.value);//动态改变文本框的月

aCell.bgColor = gcBG;
with (aCell.children["cellText"]){
var iDay = parseInt(innerText);
if (color==gcGray)
iOffset = (Victor<10)?-1:1;
iMonth += iOffset;
if (iMonth<1) {
iYear--;
iMonth = 12;
}else if (iMonth>12){
iYear++;
iMonth = 1;
}
}
this.top.frames[2].location = "Schedule/SchedByDay.aspx?date="+iYear+"-"+iMonth+"-"+iDay;
}


function fBuildCal(iYear, iMonth) {
var aMonth=new Array();
for(i=1;i<7;i++)
aMonth[i]=new Array(i);

var dCalDate=new Date(iYear, iMonth-1, 1);
var iDayOfFirst=dCalDate.getDay();
var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;
var iDate = 1;
var iNext = 1;

for (d = 0; d < 7; d++)
aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;
for (w = 2; w < 7; w++)
for (d = 0; d < 7; d++)
aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);
return aMonth;
}

function fDrawCal(iYear, iMonth, iCellHeight, iDateTextSize) {
var WeekDay = new Array("日","一","二","三","四","五","六");
var styleTD = " bgcolor='"+gcBG+"' valign='middle' align='center' height='"+iCellHeight+"' style='font-size:9pt "+iDateTextSize+" 宋体;";

with (document) {
write("<tr>");
for(i=0; i<7; i++)
write("<td "+styleTD+"color:purple'>" + WeekDay[i] + "</td>");
write("</tr>");

for (w = 1; w < 7; w++) {
write("<tr>");
for (d = 0; d < 7; d++) {
write("<td id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' onclick='fSetSelected(this)'>");
write("<font id=cellText Victor='Liming Weng'> </font>");
write("</td>")
}
write("</tr>");
}
}
}

function fUpdateCal(iYear, iMonth) {
myMonth = fBuildCal(iYear, iMonth);
var i = 0;
for (w = 0; w < 6; w++)
for (d = 0; d < 7; d++)
with (cellText[(7*w)+d]) {
Victor = i++;
if (myMonth[w+1][d]<0) {
color = gcGray;
innerText = -myMonth[w+1][d];
}else{
if (myMonth[w+1][d] == giDay && iYear == giYear && iMonth == giMonth)
{
//color = ((d==0)||(d==6))?"blue":"black";
color = "red";
innerText = myMonth[w+1][d];
}
else
{
color = ((d==0)||(d==6))?"blue":"black";
innerText = myMonth[w+1][d];
}
}
}
}
//该函数动态改变年后引起表格中的变化
function fSetYearMon(iYear, iMon){
tbSelMonth.options[iMon-1].selected = true;
for (i = 0; i < tbSelYear.length; i++)
if (tbSelYear.options[i].value == iYear)
tbSelYear.options[i].selected = true;
fUpdateCal(iYear, iMon);//将改变厚的值传给fUpdateCal()以便以在表格中显示变化
}

function fPrevMonth(){
var iMon = tbSelMonth.value;
var iYear = tbSelYear.value;

if (--iMon<1) {
iMon = 12;
iYear--;
}

fSetYearMon(iYear, iMon);
}

function fNextMonth(){
var iMon = tbSelMonth.value;
var iYear = tbSelYear.value;

if (++iMon>12) {
iMon = 1;
iYear++;
}

fSetYearMon(iYear, iMon);
}

function ShowCalendar()
{
var gMonths = new Array(" 1月"," 2月"," 3月"," 4月"," 5月"," 6月"," 7月"," 8月"," 9月","10月","11月","12月");

with (document) {
write("<table border='0' bgcolor='#F8F9EE'>");
write("<TR>");
write("<td valign='middle' align='center'><input type='button' name='PrevMonth' value='<' style='height:18;width:18' onClick='fPrevMonth()'>");
write(" <SELECT name='tbSelYear' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' style='font-color:#000080;width:50;border:1 solid #99CCFF; font-size:9pt; background-color:#F8F9EE' Victor='Won'>");
for(i=1900;i<=2100;i++)
write("<OPTION value='"+i+"'>"+i+"</OPTION>");
write("</SELECT>");
write("<select name='tbSelMonth' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' style='font-color:#000080;width:50;border:0 solid #99CCFF; font-size:9pt; background-color:#F8F9EE' Victor='Won'>");
for (i=0; i<12; i++)
write("<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
write("</SELECT>");
write(" <input type='button' name='PrevMonth' value='>' style='height:18;width:18' onclick='fNextMonth()'>");
write("</td>");
write("</TR><TR>");
write("<td align='center'>");
write("<table border='0' cellspacing='0' cellpadding='0' width='100%'><tr><td><table border='0' cellspacing='0' width='100%' cellpadding='0'>");
fDrawCal(giYear, giMonth, 12, 12);
write("</table></td></tr></table>");
write("</td></TR></TABLE>");
fSetYearMon(giYear, giMonth)
}
}
需要把天干地支的名字写到循环里面
chinank 2006-06-02
  • 打赏
  • 举报
回复
// ڵ
function folderNode(id,nodeSta,folderSta,name,link,path,subFolder)
{
var arrayAux;
arrayAux = new Array;
arrayAux[0] = id;
arrayAux[1] = nodeSta;
arrayAux[2] = folderSta;
arrayAux[3] = name;
arrayAux[4] = link;
arrayAux[5] = path;
arrayAux[6] = subFolder;

return arrayAux;
}

// ׷foldersTree
function appendChild(parent, child)
{
parent[parent.length] = child;
return child;
}

// ״˵
function redrawTree()
{
var doc = frames(0).window.document;

doc.clear();
doc.writeln("<html><head><meta http-equiv='Content-Type' content='text/html' charset='utf-8'>");
doc.writeln("<link rel='stylesheet' href='../default.css' type='text/css'></head>");
doc.writeln("<body bgcolor='#F7F7F7' text='#000099' link='#000099' vlink='#000099' alink='#FF3300' leftmargin='0' rightmargin='5' marginheight='0'>");
doc.writeln("<form name='MyForm' method='Post'>");
doc.writeln("<table width='100%' border='0' cellspacing='0' cellpadding='0' height='100%' style='background: url(../Images/pageHeaderBG_File.gif) no-repeat fixed left top'><tr><td height='100'> </td></tr><tr><td>");
doc.writeln("<div style='position:absolute; left:5px; top:85px; width:100%; height:100%; overflow: auto'>");
redrawNode(foldersTree, doc, 0, 1, "");
doc.writeln("</td></tr></table>");
doc.writeln("</div>");
doc.writeln("</form>");
doc.writeln("</body>");
doc.writeln("<html>");
doc.close();
}

// Ľڵ
function redrawNode(foldersNode, doc, level, lastNode, leftSide)
{
var j=0;
var i=0;

doc.writeln("<table border=0 cellspacing=0 cellpadding=0>");
doc.writeln("<tr><td valign = middle nowrap>");
doc.write(leftSide);
if (level > 0)
{
if (foldersNode.length > 7 && foldersNode[1]) // и ڵ չ
{
if (lastNode) //'brother' ڵ з ퟀܽڵ
{
doc.write("<A href='javascript:parent.openBranch(\"" + foldersNode[0] + "\")'>");
doc.write("<img src='images/lastMinus.gif' width=20 height=22 border=noborder></a>");
leftSide = leftSide + "<img src='images/blank.gif' width=20 height=22>" ;
}
else
{
doc.write("<A href='javascript:parent.openBranch(\"" + foldersNode[0] + "\")'>");
doc.write("<img src='images/minusNode.gif' width=20 height=22 border=noborder></a>");
leftSide = leftSide + "<img src='images/vertline.gif' width=20 height=22>";
}
}
else if (foldersNode.length > 7 && !foldersNode[1])
{
if (lastNode) //'brother' ӽڵ з ퟀܽڵ
{
doc.write("<A href='javascript:parent.openBranch(\"" + foldersNode[0] + "\")'>");
doc.write("<img src='images/lastPlus.gif' width=20 height=22 border=noborder></a>");
leftSide = leftSide + "<img src='images/blank.gif' width=20 height=22>" ;
}
else
{
doc.write("<A href='javascript:parent.openBranch(\"" + foldersNode[0] + "\")'>");
doc.write("<img src='images/plusNode.gif' width=20 height=22 border=noborder></a>");
leftSide = leftSide + "<img src='images/vertline.gif' width=20 height=22>";
}
}
else
{
if (lastNode) //'brother' ӽڵ з ퟀܽڵ
{
doc.write("<img src='images/lastnode.gif' width=20 height=22>");
leftSide = leftSide + "<img src='images/blank.gif' width=20 height=22>" ;
}
else
{
doc.write("<img src='images/node.gif' width=20 height=22>");
leftSide = leftSide + "<img src='images/vertline.gif' width=20 height=22>";
}
}
}
if (level == 0) // ¼
{
//doc.write("<a href='javascript:parent.openFolder(\"" + foldersNode[0] + "\",\"" + foldersNode[4] + "\")'>");
doc.write("<img src=images/mainIcon.gif width=24 height=22 border=noborder></a>");
doc.write("<td valign=middle align=left nowrap>");
//doc.write("<a href='javascript:parent.openFolder(\"" + foldersNode[0] + "\",\"" + foldersNode[4] + "\")'>");
doc.write("<font style='font-size:9pt;font-family: '>"+foldersNode[3]+"</a></font>");
doc.writeln("</table>");
}
else
{
displayIconAndLabel(foldersNode, doc);
doc.writeln("</table>");
}
if (foldersNode.length > 7 && foldersNode[1]) // ڵ չ
{
level=level+1;
for (i=7; i<foldersNode.length;i++)
if (i==foldersNode.length-1)
redrawNode(foldersNode[i], doc, level, 1, leftSide);
else
redrawNode(foldersNode[i], doc, level, 0, leftSide);
}
}
// ʾ ͼ Ʊ
function displayIconAndLabel(foldersNode, doc)
{
doc.write("<A href='javascript:parent.openFolder(\"" + foldersNode[0] + "\",\"" + foldersNode[4] + "\")'><img src=images/");
if (foldersNode[2])
doc.write("openfolder.gif width=24 height=22 border=noborder></a>");
else
doc.write("closedfolder.gif width=24 height=22 border=noborder></a>");
doc.write("<td valign=middle align=left nowrap>");
doc.write("<a href='javascript:parent.openFolder(\"" + foldersNode[0] + "\",\"" + foldersNode[4] + "\")'>");
doc.write("<font style='font-size:9pt;font-family: '>"+foldersNode[3]+"</a></font>");
doc.write("<input type='hidden' name='hidPath"+foldersNode[0]+"' value='"+foldersNode[5]+"'>");
doc.write("<input type='hidden' name='hidSubFolder"+foldersNode[0]+"' value='"+foldersNode[6]+"'>");
}

//ڵ , е ӽڵ պ
function closeBranch(foldersNode)
{
var i=0;
for (i=7; i< foldersNode.length; i++)
closeBranch(foldersNode[i]);
foldersNode[1] = 0;
foldersNode[2] = 0;
if (foldersNode[0] == lastopenfolder)
{
isopen = 1;
}
}

// ڵ
function clickOnBranch(foldersNode, folderID)
{
var i=0;

if (foldersNode[0] == folderID)
{
if (foldersNode[1])
{
closeBranch(foldersNode);
if (isopen == 1)
{
isopen = 0;
openFolder(foldersNode[0],foldersNode[4]);
}
}
else
{
foldersNode[1] = 1;
}
}
else
{
for (i=7; i< foldersNode.length; i++)
clickOnBranch(foldersNode[i], folderID);
}
}

//
function clickOnFolder(foldersNode, folderID)
{
var i=0;
foldersNode[2] = 0;
if (foldersNode[0] == folderID)
{
foldersNode[2] = 1;
}
for (i=7; i< foldersNode.length; i++)
{
clickOnFolder(foldersNode[i], folderID);
}
}

//򿪷
function openBranch(branchID)
{
clickOnBranch(foldersTree, branchID);
if (branchID=="Start folder" && foldersTree[1]==0)
frames(1).location="basefolder.htm"
timeOutId = setTimeout("redrawTree()",100);
}

// 򿪼
function openFolder(branchID,linkfilename)
{
lastopenfolder = branchID;
clickOnFolder(foldersTree, branchID);
frames(1).location = linkfilename;
if (branchID=="Start folder" && foldersTree[1]==0)
frames(1).location="basefolder.htm"
timeOutId = setTimeout("redrawTree()",100);
}

//ҳ ʱij
function initializeTree()
{
generateTree();
redrawTree();
}


我以前用过,可能使这段代码,不过你需要看看在哪里把那些天干地支写到循环里
大可山人 2006-05-27
  • 打赏
  • 举报
回复
搜索过,我想应该有比较简便的算法的。
大可山人 2006-05-27
  • 打赏
  • 举报
回复
搜索过,我想应该有比较简便的算法的。
大可山人 2006-05-27
  • 打赏
  • 举报
回复

呵呵,也实在太笨了吧?
milchcow 2006-05-27
  • 打赏
  • 举报
回复
有一个笨方法,你可以把一百年的农历数据放到数据库,然后只要到数据库中取相应的日期就可以得到对应的农历了
xinke_li 2006-05-26
  • 打赏
  • 举报
回复
不知道你搜索过公历和农历的转换方法没有,老复杂了。
MonkWang 2006-05-26
  • 打赏
  • 举报
回复
帮顶 学习
ilovejolly 2006-05-26
  • 打赏
  • 举报
回复
mark

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧