⑴ 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]
}
这个是算年的。算年、月、时的都比较简单,算日的比较复杂,得弄个万年历。
不过,没觉得除了算年以外有多大意义……