Created
July 20, 2014 23:09
-
-
Save jikeytang/39d67cff5e820dc72a58 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140721-题目1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
根据系统日期,输出这一天是这一年的第多少天,第多少星期,是否为闰月? | |
比如日期为:2014-07-21 | |
PS: | |
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。 | |
```javascript | |
// you code | |
``` | |
2. 粘贴代码时请使用shift+tab,缩进前面的空白。 |
raclen
commented
Jul 21, 2014
········································································
第一階段 :根据系统日期,输出这一天是这一年的第多少天,第多少星期
<script>
var Today=new Date();
document.write("今天日期是 " + Today.getFullYear()+ " 年 " + (Today.getMonth()+1) + " 月 " + Today.getDate() + " 日");
// 取得今年
var Y=Today.getFullYear();
document.write("<br>今年 : "+Y+'年');
// 設定 今年1月1日
var YearFirstDay = new Date("Jan 01, "+Y+" 00:00:00");
document.write("<br>今年的第一天 : "+ YearFirstDay.getFullYear()+ " 年 " + (YearFirstDay.getMonth()+1) + " 月 " + YearFirstDay.getDate() + " 日");
// 今天與今年第一天差幾天
document.write(parseInt((Today-YearFirstDay)/86400000));
var a1=parseInt((Today-YearFirstDay)/86400000);
document.write ('<br>今天與今年的第一天,差 : '+a1.toString()+'天');
// 今天是今年的第幾週
// 沒有細算
var weekNum = Math.round(((Today.getTime()-YearFirstDay)/(24*60*60*1000))/7 );
document.write('<br>今天是今年第 '+weekNum +'週');
</script>
第二階段:要計算閏月
(1) 計算閏月的邏輯太複雜,我連中文的意思都搞不清楚,所以我抓別人的程式碼來用
(2) 已測試過
假設輸入 2014年10月24日, 系統計算:甲午(马)年 (闰>)九月初一
今天日期是 2014 年 7 月 21 日, 系統計算:甲午(马)年 六月廿五
<script type="text/javascript">
//显示当前日期的阴阳历 Edit By R.W. (2004年12月24日 星期五)
/*
========原理说明:===================
http://search.csdn.net/Expert/topic/974/974567.xml?temp=.8316614
首先,保存公历农历之间的转换信息:以任意一年作为起点,把从这一年起若干年(依需要而定)的农历信息保存起来。
要保存一年的信息,只要两个信息就够了:
1)农历每个月的大小;2)今年是否有闰月,闰几月以及闰月的大小。
用一个整数来保存这些信息就足够了。
具体的方法是:用一位来表示一个月的大小,大月记为1,小月记为0,这样就用掉12位(无闰月)或13位(有闰月),再用高四位来表示闰月的月份,没有闰月记为0。
※-----例----:
2000年的信息数据是0xc96,化成二进制就是110010010110B,表示的含义是:1、2、5、8、10、11月大,其余月份小。
2001年的农历信息数据是0x1a95(因为闰月,所以有13位),具体的就是1、2、4、5、8、10、12月大,
其余月份小(0x1a95=1101010010101B),4月的后面那一个0表示的是闰4月小,接着的那个1表示5月大。
这样就可以用一个数组来保存这些信息。在这里用数组CalendarDate[]来保存这些信息。
※具体算法:
1。计算处所求时间到起始年正月初一的天数。
2。从起始年份开始,减去每一月的天数,一直到剩余的天数没有下一个多为止。此时,CalendarDate[]的下标到了多少,就是减去了多少年,用起始年份加上这个下标就可以得到农历年份,然后看减去了几个月。如果本年不闰月或者闰月还在后面,就可以直接得到农历月份,如果在闰月份数后面一个月,则这个月就是闰月,如果在闰月的后面,则要减去1才能得到月份数。剩余的天数就是农历日,农历时用(公历时+1)/2就可以简单的得到了。
*/
var CalendarData=new Array(100);
var madd=new Array(12);
var tgString="甲乙丙丁戊己庚辛壬癸";
var dzString="子丑寅卯辰巳午未申酉戌亥";
var numString="一二三四五六七八九十";
var monString="正二三四五六七八九十冬腊";
var weekString="日一二三四五六";
var sx="鼠牛虎兔龙蛇马羊猴鸡狗猪";
var cYear,cMonth,cDay,TheDate;
function init()
{
CalendarData = new Array(
0xA4B,0x5164B,0x6A5,0x6D4,0x415B5,0x2B6,0x957,0x2092F,0x497,0x60C96, // 1921-1930
0xD4A,0xEA5,0x50DA9,0x5AD,0x2B6,0x3126E, 0x92E,0x7192D,0xC95,0xD4A, // 1931-1940
0x61B4A,0xB55,0x56A,0x4155B, 0x25D,0x92D,0x2192B,0xA95,0x71695,0x6CA, // 1941-1950
0xB55,0x50AB5,0x4DA,0xA5B,0x30A57,0x52B,0x8152A,0xE95,0x6AA,0x615AA, // 1951-1960
0xAB5,0x4B6,0x414AE,0xA57,0x526,0x31D26,0xD95,0x70B55,0x56A,0x96D, // 1961-1970
0x5095D,0x4AD,0xA4D,0x41A4D,0xD25,0x81AA5, 0xB54,0xB6A,0x612DA,0x95B, // 1971-1980
0x49B,0x41497,0xA4B,0xA164B, 0x6A5,0x6D4,0x615B4,0xAB6,0x957,0x5092F, // 1981-1990
0x497,0x64B, 0x30D4A,0xEA5,0x80D65,0x5AC,0xAB6,0x5126D,0x92E,0xC96, // 1991-2000
0x41A95,0xD4A,0xDA5,0x20B55,0x56A,0x7155B,0x25D,0x92D,0x5192B,0xA95, // 2001-2010
0xB4A,0x416AA,0xAD5,0x90AB5,0x4BA,0xA5B, 0x60A57,0x52B,0xA93,0x40E95); // 2011-2020
madd[0]=0;madd[1]=31;madd[2]=59;madd[3]=90;
madd[4]=120;madd[5]=151;madd[6]=181;madd[7]=212;
madd[8]=243;madd[9]=273;madd[10]=304;madd[11]=334;
}
function GetBit(m,n) { return (m>>n)&1; }
function e2c()
{
TheDate= (arguments.length!=3) ? new Date() : new Date(arguments[0],arguments[1],arguments[2]);
var total,m,n,k;
var isEnd=false;
var tmp=TheDate.getYear();
if (tmp<1900) { tmp+=1900;}
total=(tmp-1921)*365+Math.floor((tmp-1921)/4)+madd[TheDate.getMonth()]+TheDate.getDate()-38;
if (TheDate.getYear()%4==0&&TheDate.getMonth()>1) { total++;}
for(m=0;;m++)
{
k=(CalendarData[m]<0xfff)?11:12;
for(n=k;n>=0;n--)
{
if(total<=29+GetBit(CalendarData[m],n))
{
isEnd=true; break;
}
total=total-29-GetBit(CalendarData[m],n);
}
if(isEnd) break;
}
cYear=1921 + m; cMonth=k-n+1; cDay=total;
if(k==12)
{
if(cMonth==Math.floor(CalendarData[m]/0x10000)+1) { cMonth=1-cMonth; }
if(cMonth>Math.floor(CalendarData[m]/0x10000)+1) { cMonth--; }
}
}
function GetcDateString()
{ var tmp="";
tmp+=tgString.charAt((cYear-4)%10); //年干
tmp+=dzString.charAt((cYear-4)%12); //年支
tmp+="(";
tmp+=sx.charAt((cYear-4)%12);
tmp+=")年 ";
if(cMonth<1) { tmp+="(<font color='#ff0000'>闰</font>>)"; tmp+=monString.charAt(-cMonth-1); } else {tmp+=monString.charAt(cMonth-1);}
tmp+="月";
tmp+=(cDay<11)?"初":((cDay<20)?"十":((cDay<30)?"廿":"三十")); /*卅*/
if (cDay%10!=0||cDay==10) { tmp+=numString.charAt((cDay-1)%10); }
return tmp;
}
init();
function GetLunarDay(solarYear,solarMonth,solarDay)
{
if (solarYear<1921 || solarYear>2020)
{
return ""; //年份不在1921-2020范围,无法获得。
}
else
{
solarMonth = (parseInt(solarMonth)>0) ? (solarMonth-1) : 11;
e2c(solarYear,solarMonth,solarDay); return GetcDateString();
}
}
</script>
<script type="text/javascript">
//document.write(GetLunarDay(1930,2,1));
document.write('<br>假設輸入 2014年10月24日');
document.write(', 系統計算:'+GetLunarDay(2014,10,24));
// 今天是不是閏月
var Today=new Date();
document.write("<br>今天日期是 " + Today.getFullYear()+ " 年 " + (Today.getMonth()+1) + " 月 " + Today.getDate() + " 日");
document.write(', 系統計算:'+GetLunarDay(Today.getFullYear(),(Today.getMonth()+1), Today.getDate() ));
</script>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment