Skip to content

Instantly share code, notes, and snippets.

@jikeytang
Created July 20, 2014 23:09
Show Gist options
  • Save jikeytang/39d67cff5e820dc72a58 to your computer and use it in GitHub Desktop.
Save jikeytang/39d67cff5e820dc72a58 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140721-题目1
根据系统日期,输出这一天是这一年的第多少天,第多少星期,是否为闰月?
比如日期为:2014-07-21
PS:
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。
```javascript
// you code
```
2. 粘贴代码时请使用shift+tab,缩进前面的空白。
@raclen
Copy link

raclen commented Jul 21, 2014

var myDate=new Date();
var time=Date.parse(new Date());
//alert(time)
var lasttime=Date.parse("2014-01-01");
//alert(lasttime)
var day=parseInt((time-lasttime)/(1000*60*60*24));

alert("今天是今年的第"+day+"天");
var mot=day/7;
var lp=Math.ceil(mot)
alert("今天是今年的第"+lp+"周");
var year=myDate.getFullYear();
        if((year%4==0&&year%100!=0)||(year%400==0)){
            alert("今年是闰年")

            }
            else{
                alert("今年不是闰年")}

@zhangchenna
Copy link

········································································

@bhnddowinf
Copy link

第一階段 :根据系统日期,输出这一天是这一年的第多少天,第多少星期

 <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>

@bhnddowinf
Copy link

第二階段:要計算閏月
(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