⑴ js 24節氣怎麼算
24節氣怎麼算?
不用算....萬年歷中有....年歷中也有....網上一查更有很方便!
二十四節氣歌
春雨驚春清谷天,夏滿芒夏暑相連。
秋處露秋寒霜降,冬雪雪冬小大寒。
[編輯本段]二十四節氣
立春:2月4日-5日,謂春季開始之節氣
雨水:2月18日—20日,此時冬去春來,氣溫開始回升,空氣濕度不斷增大,但冷空氣活動仍十分頻繁。
驚蟄:3月5日(6日),指的是冬天蟄伏土中的冬眠生物開始活動。驚蟄前後乍寒乍暖,氣溫和風的變化都較大。
春分:每年的3月20日(或21日),陽光直照赤道,晝夜幾乎等長。我國廣大地區越冬作物將進入春季生長階段。
清明:每年4月5日(或4日),氣溫回升,天氣逐漸轉暖。
穀雨:4月20日前後,雨水增多,利於谷類生長。穀雨
立夏:5月5日或6日「立夏」。萬物生長,欣欣向榮。
小滿:5月20日或21日叫「小滿」。麥類等夏熟作物此時顆粒開始飽滿,但未成熟。
芒種:6月6日前後,此時太陽移至黃經75度。麥類等有芒作物已經成熟,可以收藏種子。
夏至:6月22日前後,日光直射北回歸線,出現「日北至,日長至,日影短至」,故曰「夏至」。
小暑:7月7日前後,入暑,標志著我國大部分地區進入炎熱季節。
大暑:7月23日前後,正值中伏前後。這一時期是我國廣大地區一年中最炎熱的時期,但也有反常年份,「大暑不熱」,雨水偏多。
立秋:8月7日或8日,草木開始結果,到了收獲季節。
處暑:8月23日或24日,「處」為結束的意思,至暑氣即將結束,天氣將變得涼爽了。由於正值秋收之際,降水十分寶貴。
白露:9月8日前後,由於太陽直射點明顯南移,各地氣溫下降很快,天氣涼爽,晚上貼近地面的水氣在草木上結成白色露珠,由此得名「白露」。
秋分:9月22日前後,日光直射點又回到赤道,形成晝夜等長。
寒露:10月8日前後。此時太陽直射點繼續南移,北半球氣溫繼續下降,天氣更冷,露水有森森寒意,故名為「寒露風」。
霜降:10月23日前後為「寒露」,黃河流域初霜期一般在10月下旬,與「霜降」節令相吻合,霜對生長中的農作物危害很大。
立冬:每年11月7日前後。
小雪:11月22日前後為「小雪」節氣。北方冷空氣勢力增強,氣溫迅速下降,降水出現雪花,但此時為初雪階段,雪量小,次數不多,黃河流域多在「小雪」節氣後降雪。
大雪:12月7日前後。此時太陽直射點快接近南回歸線,北半球晝短夜長。
冬至:12月22日前後,此時太陽幾乎直射南回歸線,北半球則形成了日南至、日短至、日影長至,成為一年中白晝最短的一天。冬至以後北半球白晝漸長,氣溫持續下降,並進入年氣溫最低的「三九」。
小寒:1月5日前後,此時氣候開始寒冷。
大寒:1月20日前後,一年中最寒冷的時候。
⑵ 如何用javaScript編寫一個萬年歷
<html>
<head>
<base fptype="TRUE">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>本地時間</title>
<script>setInterval("jnkc.innerHTML=new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",1000);</script>
<marquee scrollamount=8><div id='jnkc'></div>
</marquee>
</head>
<body>
<script language=javascript>
function settab()
{
var tab=document.getElementById('tab1');
//alert(se1.options[se1.selectedIndex].text)
var se11=se1.options[se1.selectedIndex].text;
var se21=se2.options[se2.selectedIndex].text;//下拉列表中的日期
//alert(se11+","+se21)
var lastday=new Date(se11,se21,0).getDate();//所選擇月的天數
var firstday=new Date(se11,se21-1,1).getDay();//選擇月的第一天是星期幾
//alert(lastday+","+firstday)
var weekend;//每周的最後一天的日期
var lines;//第幾行,相對於表格,星期為第零行
//第一行日期
for(var lin1=0;lin1<7;lin1++)
{
if(lin1<firstday)
tab.rows[1].cells[lin1].innerHTML=" ";
else
if(lin1==0||lin1==6)
tab.rows[1].cells[lin1].innerHTML="<font color=red>"+(lin1-firstday+1)+"</font>";
else
tab.rows[1].cells[lin1].innerHTML=lin1-firstday+1;
//alert(lin1+","+firstday)
weekend=lin1-firstday+1;
lines=1;//第一行
}
//將最後2行值空之後再添加數據,以免遺留上一個月的數據,二行相對於非閏年的二月份
for(var i=0;i<7;i++)
{
tab.rows[5].cells[i].innerHTML=" ";
tab.rows[6].cells[i].innerHTML=" ";
}
while(weekend<lastday)//循環到月末
{
for(var lin2=0;lin2<7;lin2++)
{
if(weekend+lin2<lastday)//數字小於等於當前月的最後一天
{
if(lin2==0||lin2==6)
tab.rows[lines+1].cells[lin2].innerHTML="<font color=red>"+(weekend+1+lin2)+"</font>";
else
tab.rows[lines+1].cells[lin2].innerHTML=weekend+1+lin2;
}
⑶ 想用單片機設計一個萬年歷,如何實現陽歷到農歷的轉換最好是給出思路和相關程序。
<%
' 用途:
' 當前日期計算該日期的農歷天乾地支及當年屬相
' ##-------------------------------------------##
Dim objChinaDay
Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni
Set objChinaDay = New ChinaDay
Call objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
Response.Write sDay&"" '當前日期
Response.Write sWeekDay&"" '星期
Response.Write sChinaYear&"" '農歷年份
Response.Write sChinaDay&"" '農歷日期
Response.Write sChinaAni&"" '生肖
' Copyright: 本代碼非原創,原作者未知。
'*********************************************************************************
Class ChinaDay
Dim arrWeekName(7), MonthAdd(11), NongliData(99)
Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12)
Dim curTime, curYear, curMonth, curDay, curWeekday
Dim i, m, n, k, isEnd, bit, TheDate
'初始化數據
Sub Class_Initialize()
'-------------------------------------------------------------------------
'定義顯示字串
'星期名
arrWeekName(0) = "*"
arrWeekName(1) = "星期日"
arrWeekName(2) = "星期一"
arrWeekName(3) = "星期二"
arrWeekName(4) = "星期三"
arrWeekName(5) = "星期四"
arrWeekName(6) = "星期五"
arrWeekName(7) = "星期六"
'天干名稱
arrTianGan(0) = "甲"
arrTianGan(1) = "乙"
arrTianGan(2) = "丙"
arrTianGan(3) = "丁"
arrTianGan(4) = "戊"
arrTianGan(5) = "己"
arrTianGan(6) = "庚"
arrTianGan(7) = "辛"
arrTianGan(8) = "壬"
arrTianGan(9) = "癸"
'地支名稱
arrDiZhi(0) = "子"
arrDiZhi(1) = "丑"
arrDiZhi(2) = "寅"
arrDiZhi(3) = "卯"
arrDiZhi(4) = "辰"
arrDiZhi(5) = "巳"
arrDiZhi(6) = "午"
arrDiZhi(7) = "未"
arrDiZhi(8) = "申"
arrDiZhi(9) = "酉"
arrDiZhi(10) = "戌"
arrDiZhi(11) = "亥"
'屬相名稱
arrShuXiang(0) = "鼠"
arrShuXiang(1) = "牛"
arrShuXiang(2) = "虎"
arrShuXiang(3) = "兔"
arrShuXiang(4) = "龍"
arrShuXiang(5) = "蛇"
arrShuXiang(6) = "馬"
arrShuXiang(7) = "羊"
arrShuXiang(8) = "猴"
arrShuXiang(9) = "雞"
arrShuXiang(10) = "狗"
arrShuXiang(11) = "豬"
'農歷日期名
arrDayName(0) = "*"
arrDayName(1) = "初一"
arrDayName(2) = "初二"
arrDayName(3) = "初三"
arrDayName(4) = "初四"
arrDayName(5) = "初五"
arrDayName(6) = "初六"
arrDayName(7) = "初七"
arrDayName(8) = "初八"
arrDayName(9) = "初九"
arrDayName(10) = "初十"
arrDayName(11) = "十一"
arrDayName(12) = "十二"
arrDayName(13) = "十三"
arrDayName(14) = "十四"
arrDayName(15) = "十五"
arrDayName(16) = "十六"
arrDayName(17) = "十七"
arrDayName(18) = "十八"
arrDayName(19) = "十九"
arrDayName(20) = "二十"
arrDayName(21) = "廿一"
arrDayName(22) = "廿二"
arrDayName(23) = "廿三"
arrDayName(24) = "廿四"
arrDayName(25) = "廿五"
arrDayName(26) = "廿六"
arrDayName(27) = "廿七"
arrDayName(28) = "廿八"
arrDayName(29) = "廿九"
arrDayName(30) = "卅十"
'農歷月份名
arrMonName(0) = "*"
arrMonName(1) = "正"
arrMonName(2) = "二"
arrMonName(3) = "三"
arrMonName(4) = "四"
arrMonName(5) = "五"
arrMonName(6) = "六"
arrMonName(7) = "七"
arrMonName(8) = "八"
arrMonName(9) = "九"
arrMonName(10) = "十"
arrMonName(11) = "冬"
arrMonName(12) = "臘"
'-------------------------------------------------------------------------
'公差數據定義
'公歷每月前面的天數
MonthAdd(0) = 0
MonthAdd(1) = 31
MonthAdd(2) = 59
MonthAdd(3) = 90
MonthAdd(4) = 120
MonthAdd(5) = 151
MonthAdd(6) = 181
MonthAdd(7) = 212
MonthAdd(8) = 243
MonthAdd(9) = 273
MonthAdd(10) = 304
MonthAdd(11) = 334
'農歷數據
NongliData(0) = 2635
NongliData(1) = 333387
NongliData(2) = 1701
NongliData(3) = 1748
NongliData(4) = 267701
NongliData(5) = 694
NongliData(6) = 2391
NongliData(7) = 133423
NongliData(8) = 1175
NongliData(9) = 396438
NongliData(10) = 3402
NongliData(11) = 3749
NongliData(12) = 331177
NongliData(13) = 1453
NongliData(14) = 694
NongliData(15) = 201326
NongliData(16) = 2350
NongliData(17) = 465197
NongliData(18) = 3221
NongliData(19) = 3402
NongliData(20) = 400202
NongliData(21) = 2901
NongliData(22) = 1386
NongliData(23) = 267611
NongliData(24) = 605
NongliData(25) = 2349
NongliData(26) = 137515
NongliData(27) = 2709
NongliData(28) = 464533
NongliData(29) = 1738
NongliData(30) = 2901
NongliData(31) = 330421
NongliData(32) = 1242
NongliData(33) = 2651
NongliData(34) = 199255
NongliData(35) = 1323
NongliData(36) = 529706
NongliData(37) = 3733
NongliData(38) = 1706
NongliData(39) = 398762
NongliData(40) = 2741
NongliData(41) = 1206
NongliData(42) = 267438
NongliData(43) = 2647
NongliData(44) = 1318
NongliData(45) = 204070
NongliData(46) = 3477
NongliData(47) = 46
NongliData(48) = 1386
NongliData(49) = 2413
NongliData(50) = 330077
NongliData(51) = 1197
NongliData(52) = 2637
NongliData(53) = 268877
NongliData(54) = 3365
NongliData(55) = 531109
NongliData(56) = 2900
NongliData(57) = 2922
NongliData(58) = 398042
NongliData(59) = 2395
NongliData(60) = 1179
NongliData(61) = 267415
NongliData(62) = 2635
NongliData(63) = 661067
NongliData(64) = 1701
NongliData(65) = 1748
NongliData(66) = 398772
NongliData(67) = 2742
NongliData(68) = 2391
NongliData(69) = 330031
NongliData(70) = 1175
NongliData(71) = 1611
NongliData(72) = 200010
NongliData(73) = 3749
NongliData(74) = 527717
NongliData(75) = 1452
NongliData(76) = 2742
NongliData(77) = 332397
NongliData(78) = 2350
NongliData(79) = 3222
NongliData(80) = 268949
NongliData(81) = 3402
NongliData(82) = 3493
NongliData(83) = 133973
NongliData(84) = 1386
NongliData(85) = 464219
NongliData(86) = 605
NongliData(87) = 2349
NongliData(88) = 334123
NongliData(89) = 2709
NongliData(90) = 2890
NongliData(91) = 267946
NongliData(92) = 2773
NongliData(93) = 592565
NongliData(94) = 1210
NongliData(95) = 2651
NongliData(96) = 395863
NongliData(97) = 1323
NongliData(98) = 2707
NongliData(99) = 265877
End Sub
'#################################################################
'主要方法 Action
' inDay 輸入日期,如果不輸入則默認為當前日期
' sDay 中文格式日期
' sWeekDay 周幾
' sChinaYear 農歷年
' sChinaDay 農歷日
' sChinaAni 屬相
'#################################################################
Public Function Action(inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
'轉換要轉換的日期
If inDay="" Or Not IsDate(inDay) Then
'獲取當前系統時間
curTime = Now()
Else
curTime = CDate(inDay)
End If
If Datediff("d",curTime,Cdate("1921-2-8"))>0 Then
Exit Function
End If
'生成當前公歷年、月、日 ==> sDay
curYear = Year(curTime)
curMonth = Month(curTime)
curDay = Day(curTime)
sDay = curYear&"年"
If (curMonth < 10) Then
sDay = sDay&"0"&curMonth&"月"
Else
sDay = sDay&curMonth&"月"
End If
If (curDay < 10) Then
sDay = sDay&"0"&curDay&"日"
Else
sDay = sDay&curDay&"日"
End If
'生成當前公歷星期 ==> sWeekDay
curWeekday = Weekday(curTime)
sWeekDay = arrWeekName(curWeekday)
'計算到初始時間1921年2月8日的天數:1921-2-8(正月初一)
TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38
If ((curYear Mod 4) = 0 AND curMonth > 2) Then
TheDate = TheDate + 1
End If
'計算農歷天干、地支、月、日
isEnd = 0
m = 0
'------------------------------------
Do
If (NongliData(m) < 4095) Then
k = 11
Else
k = 12
End if
n = k
'------------------------------------
Do
If (n < 0) Then
Exit Do
End If
'獲取NongliData(m)的第n個二進制位的值
bit = NongliData(m)
For i = 1 To n Step 1
bit = Int(bit / 2)
Next
bit = bit Mod 2
If (TheDate <= 29 + bit) Then
isEnd = 1
Exit Do
End If
TheDate = TheDate - 29 - bit
n = n - 1
Loop
'------------------------------------
If (isEnd = 1) Then
Exit Do
End If
m = m + 1
Loop
'------------------------------------
curYear = 1921 + m
curMonth = k - n + 1
curDay = TheDate
If (k = 12) Then
If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then
curMonth = 1 - curMonth
ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then
curMonth = curMonth - 1
End if
End If
'生成農歷天干、地支==> sChinaYear
sChinaYear = "農歷"&arrTianGan(((curYear - 4) Mod 60) Mod 10)&arrDiZhi(((curYear - 4) Mod 60) Mod 12)&"年"
'生成屬相 == > sChinaAni
sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12)
'生成農歷月、日 ==> NongliDayStr
If (curMonth < 1) Then
sChinaDay = "閏"&arrMonName(-1 * curMonth)
Else
sChinaDay = arrMonName(curMonth)
End If
sChinaDay = sChinaDay&"月"
sChinaDay = sChinaDay & arrDayName(curDay)
End Function
End Class
%>
⑷ 如何用JS寫一個日歷
首先必須解決的問題是表格的行與列問題。列是固定的,七列,因為一周有七天。行需要動態計算,因為,每一個月的第一天是星期幾是一個變數,因而第一天在表格中的第幾個單元也就跟著變化,同時,每個月的總天數不一致也影響著各個月對表格行數的需要量。
一. 表格的行數問題
1.首先取得處理月的總天數
JS不提供此參數,我們需要計算。考慮到閏年問題會影響二月份的天數,我們先編寫一個判斷閏年的自編函數:
function is_leap(year) {
return (year%100==0?res=(year%400==0?1:0):res=(year%4==0?1:0));
}
接著定義一個包含十二個月在內的月份總天數的數組:
m_days=new Array(31,28+is_leap(ynow),31,30,31,31,30,31,30,31,30,31);
m_days這個數組里,二月份的天數已經加入閏年的信息:28+is_leap(ynow)。數組元素從0開始,正好對應於JS提供的Date函數提供的getMonth返回值,即0表示一月,1表示二月,2表示三月,依此類推。
這樣,各月總數可以這樣取得:m_days[x]。其中,x為0至11的自然數。
2.計算處理月第一天是星期幾
可以使用Date函數的getDay取得,返回的值從0到6,0表示星期一,1表示星期二,2表示星期三,其餘依此類推。代碼如下(假設要處理的時間為2008年3月):
n1str=new Date(2008,3,1);
firstday=n1str.getDay();
有了月總天數和該月第一天是星期幾這兩個已知條件,就可以解決表格所需行數問題:(當前月天數+第一天是星期幾的數值)除以七。表格函數需要整數,因此,我們使用Math.ceil來處理:
tr_str=Math.ceil((m_days[mnow] + firstday)/7);
表格中的tr標簽實際上代表表格的行,因此變數tr_str是我們往下寫表格的重要依據。
二. 列印日歷表格
可以使用兩個for語句嵌套起來實現:外層for語句寫行,內層for語句寫單元格。
for(i=0;i<tr_str;i++) { //外層for語句 - tr標簽
document.write("<tr>");
for(k=0;k<7;k++) { //內層for語句 - td標簽
idx=i*7+k; //表格單元的自然序號
date_str=idx-firstday+1; //計算日期
//這里是處理有效日期代碼
} //內層for語句結束
document.write("</tr>");
} //外層for語句結束
單元格的自然序號是否代表有效日期非常關鍵,為此必須加入一個過濾機制:僅列印有效的日期。有效的日期大於0小於小於等於處理月的總天數。
⑸ JS萬年歷中如何求某天的節氣
你要發就發個全的代碼,你sTerm是什麼意思哦.節氣關繫到農歷,是比較復雜的,沒辦法寫死.
不知道樓主讀過源代碼沒有,你寫的代碼嚴重錯誤,問題很多.我猜你的意思獲得本月中的農歷節氣的時間
我給你寫了一個,可以運行的,你得到了Date對象,就可以得到一切.你讀懂源代碼沒有?
<script type="text/javascript">
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);
//===== 某年的第n個節氣為幾日(從0小寒起算)
function sTerm(y,n) //y代表年,n為第幾個節日
{ var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) );
return offDate;
}
function jieqi(objDate) {
var year=objDate.getFullYear(); //當前年
var m=objDate.getMonth();//當前月
var d=objDate.getDate(); //當前日
for (var i=0;i<24;i++) {
var offDate=sTerm(year,i);
if(m==offDate.getMonth()&&offDate.getDate()<=d) break;//如果有節氣在當前月且日期小於等於當前的日期,跳出!
}
alert(offDate);
return offDate ;
}
</script>
以下是調用代碼
<input type="button" value="發送" onclick="jieqi(new Date());">
---你沒表達清楚你的意思,我只能讀你的代碼了解你的意思,你最開始寫的代碼大概意思就是我寫的代碼。
---之所以運行起不對,是因為我改變了介面,我以為你只是單獨把這一部分抽取出來。
--------------請把你的需求用語言詳細的描述出來
你輸入什麼值,你想得到什麼值!
你問問題要出於負責的態度才行,表達不清楚,我只能讀你的代碼猜測你的意思.不用發源代碼,我自己會去看的.
-------------------------------------******************************************************************************************
我想我解決你的問題,另外你舉例子不能亂舉啊。2007。7。3夏至已過了,你說夏至,害得我調了一晚上。
<html>
<head>
<script type="text/javascript">
var Animals=new Array("鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬");
var solarTerm = new Array("小寒","大寒","立春","雨水","驚蟄","春分","清明","穀雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);
function sTerm(y,n) {
var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )
return offDate;
}
function jieqi(objDate) {
var year=objDate.getFullYear();
var d; var m;
for (var i=0;i<24;i+=1) {
d=sTerm(year,i);
m=i;
if (objDate<=d) break;
}
return m
}
function query(){
var year=document.getElementById("year").value;
var month=document.getElementById("month").value;
var date=document.getElementById("date").value;
var dateObj=new Date(year,month-1,date);
var m=jieqi(dateObj);
alert("農歷下一個節日為"+solarTerm[m]);
}
</script>
</head>
<body>
輸入查詢日期
<input type="input" id="year">年
<input type="input" id="month">月
<input type="input" id="date">日
<input type="button" value="查詢" onclick="query()">
</body>
</html>
⑹ 壽星萬年歷演算法 js庫 C++DLL都可以 謝謝
轉成C++的有,VB6的沒有。C++的庫從剛開始轉換,到修改完美,這個過程經歷了6年多。因此,我回想,不會有人能夠答有這么多的精力,為了一個採納和幾個知道財富值、經驗值幫你去完成這個任務的,如果你只是想寫個萬年歷程序的,就沒必要這么大費精力地去轉換了。如果有需要,我這里剛好有比壽星更好的C++的dll庫可以提供給你。
⑺ 萬年歷的計算公式
—— 蔡勒(Zeller)公式
歷史上的某一天是星期幾?未來的某一天是星期幾?關於這個問題,有很多計算公式(兩個通用計算公式和一些分段計算公式),其中最著名的是蔡勒(Zeller)公式。
即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符號含義如下,w:星期;c:世紀-1;y:年(兩位數);m:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算);d:日;[ ]代表取整,即只要整數部分。(C是世紀數減一,y是年份後兩位,M是月份,d是日數。
1月和2月要按上一年的13月和 14月來算,這時C和y均按上一年取值。)
算出來的W除以7,余數是幾就是星期幾。如果余數是0,則為星期日。
以2049年10月1日(100周年國慶)為例,用蔡勒(Zeller)公式進行計算,過程如下:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7餘5)
即2049年10月1日(100周年國慶)是星期5。
你的生日(出生時、今年、明年)是星期幾?不妨試一試。
不過,以上公式只適合於1582年10月15日之後的情形(當時的羅馬教皇將愷撒大帝制訂的儒略歷修改成格里歷,即今天使用的公歷)。
⑻ 關於用JAVASCRIPT做日歷的問題!
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>日期選擇 - BY ziyue</title>
<script language="JavaScript" type="text/JavaScript">
/*=======Calendar.js=======By Jiang Hongbin=======*/
var months = new Array("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月");
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var days = new Array("日","一", "二", "三", "四", "五", "六");
var today;
document.writeln("<div id='Calendar' style='position:absolute; z-index:1; visibility: hidden; filter:\"progid:DXImageTransform.Microsoft.Shadow(direction=135,color=#999999,strength=3)\"'></div>");
function getDays(month, year)
{
//下面的這段代碼是判斷當前是否是閏年的
if (1 == month)
return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
else
return daysInMonth[month];
}
function getToday()
{
//得到今天的年,月,日
this.now = new Date();
this.year = this.now.getFullYear();
this.month = this.now.getMonth();
this.day = this.now.getDate();
}
function getStringDay(str)
{
//得到輸入框的年,月,日
var str=str.split("-")
this.now = new Date(parseFloat(str[0]),parseFloat(str[1])-1,parseFloat(str[2]));
this.year = this.now.getFullYear();
this.month = this.now.getMonth();
this.day = this.now.getDate();
}
function newCalendar() {
var parseYear = parseInt(document.all.Year.options[document.all.Year.selectedIndex].value);
var newCal = new Date(parseYear, document.all.Month.selectedIndex, 1);
var day = -1;
var startDay = newCal.getDay();
var daily = 0;
if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth()))
day = today.day;
var tableCal = document.all.calendar;
var intDaysInMonth =getDays(newCal.getMonth(), newCal.getFullYear());
for (var intWeek = 1; intWeek < tableCal.rows.length;intWeek++)
for (var intDay = 0;intDay < tableCal.rows[intWeek].cells.length;intDay++)
{
var cell = tableCal.rows[intWeek].cells[intDay];
if ((intDay == startDay) && (0 == daily))
daily = 1;
if(day==daily) //今天,調用今天的Class
{
cell.style.background='#6699CC';
cell.style.color='#FFFFFF';
//cell.style.fontWeight='bold';
}
else if(intDay==6) //周六
cell.style.color='green';
else if (intDay==0) //周日
cell.style.color='red';
if ((daily > 0) && (daily <= intDaysInMonth))
{
cell.innerText = daily;
daily++;
}
else
cell.innerText = "";
}
}
function GetDate(InputBox)
{
var sDate;
//這段代碼處理滑鼠點擊的情況
if (event.srcElement.tagName == "TD")
if (event.srcElement.innerText != "")
{
sDate = document.all.Year.value + "-" + document.all.Month.value + "-" + event.srcElement.innerText;
eval("document.all."+InputBox).value=sDate;
HiddenCalendar();
}
}
function HiddenCalendar()
{
//關閉選擇窗口
document.all.Calendar.style.visibility='hidden';
}
function ShowCalendar(InputBox)
{
var x,y,intLoop,intWeeks,intDays;
var DivContent;
var year,month,day;
//var o=document.getElementById(InputBox);
var o=InputBox;
var oid=o.id;
var thisyear; //真正的今年年份
if(!oid)oid=o.name;
thisyear=new getToday();
thisyear=thisyear.year;
today = o.value;
if(isDate(today))
today = new getStringDay(today);
else
today = new getToday();
//顯示的位置
x=o.offsetLeft;
y=o.offsetTop;
while(o=o.offsetParent)
{
x+=o.offsetLeft;
y+=o.offsetTop;
}
document.all.Calendar.style.left=x+2;
document.all.Calendar.style.top=y+20;
document.all.Calendar.style.visibility="visible";
//下面開始輸出日歷表格(border-color:#9DBAF7)
DivContent="<table border='0' cellspacing='0' style='border:1px solid #0066FF; background-color:#EDF2FC'>";
DivContent+="<tr>";
DivContent+="<td style='border-bottom:1px solid #0066FF; background-color:#C7D8FA'>";
//年
DivContent+="<select name='Year' id='Year' onChange='newCalendar()' style='font-family:Verdana; font-size:12px'>";
for (intLoop = thisyear - 100; intLoop < (thisyear + 2); intLoop++)
DivContent+="<option value= " + intLoop + " " + (today.year == intLoop ? "Selected" : "") + ">" + intLoop + "</option>";
DivContent+="</select>";
//月
DivContent+="<select name='Month' id='Month' onChange='newCalendar()' style='font-family:Verdana; font-size:12px'>";
for (intLoop = 0; intLoop < months.length; intLoop++)
DivContent+="<option value= " + (intLoop + 1) + " " + (today.month == intLoop ? "Selected" : "") + ">" + months[intLoop] + "</option>";
DivContent+="</select>";
DivContent+="</td>";
DivContent+="<td style='border-bottom:1px solid #0066FF; background-color:#C7D8FA; font-weight:bold; font-family:Wingdings 2,Wingdings,Webdings; font-size:16px; padding-top:2px; color:#4477FF; cursor:hand' align='center' title='關閉' onClick='javascript:HiddenCalendar()'>S</td>";
DivContent+="</tr>";
DivContent+="<tr><td align='center' colspan='2'>";
DivContent+="<table id='calendar' border='0' width='100%'>";
//星期
DivContent+="<tr>";
for (intLoop = 0; intLoop < days.length; intLoop++)
DivContent+="<td align='center' style='font-size:12px'>" + days[intLoop] + "</td>";
DivContent+="</tr>";
//天
for (intWeeks = 0; intWeeks < 6; intWeeks++)
{
DivContent+="<tr>";
for (intDays = 0; intDays < days.length; intDays++)
DivContent+="<td onClick='GetDate(\"" + oid + "\")' style='cursor:hand; border-right:1px solid #BBBBBB; border-bottom:1px solid #BBBBBB; color:#215DC6; font-family:Verdana; font-size:12px' align='center'></td>";
DivContent+="</tr>";
}
DivContent+="</table></td></tr></table>";
document.all.Calendar.innerHTML=DivContent;
newCalendar();
}
function isDate(dateStr)
{
var datePat = /^(\d{4})(\-)(\d{1,2})(\-)(\d{1,2})$/;
var matchArray = dateStr.match(datePat);
if (matchArray == null) return false;
var month = matchArray[3];
var day = matchArray[5];
var year = matchArray[1];
if (month < 1 || month > 12) return false;
if (day < 1 || day > 31) return false;
if ((month==4 || month==6 || month==9 || month==11) && day==31) return false;
if (month == 2)
{
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) return false;
}
return true;
}
</script>
<style type="text/css">
<!--
td,input {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</head>
<body>
<form name="form1" method="post" action="">
<table width="500" border="0" align="center" cellspacing="1" bgcolor="#CCCCCC">
<tr bgcolor="#FFFFFF">
<td align="right">您的生日:</td>
<td><input name="birthday" type="text" id="birthday" title="點擊選擇" onClick="javascript:ShowCalendar(this)" size="20">
<input type="button" name="Submit" value="選 擇" onClick="javascript:ShowCalendar(form1.birthday)"></td>
<td>BLOG:<a href="http://web-v.com/">http://web-v.com/</a></td>
</tr>
</table>
</form>
</body>
</html>
⑼ 在用js寫萬年歷時怎麼讓天和星期相對應
天和星期是自然對應的。
new Date().getDays 和 new Date().getDate()
⑽ 求關於干支的函數(請用js)
function getGanZhi(year){
var gan='甲乙丙丁戊己庚辛壬癸', ='子丑寅卯辰巳午未申酉戌亥';
if ( year < 0 )
year += 1;
return gan[(year-1984+60000)%10] + [(year-1984+60000)%12]
}
這個是算年的。算年、月、時的都比較簡單,算日的比較復雜,得弄個萬年歷。
不過,沒覺得除了算年以外有多大意義……