• JS计算属相


     背景:一个人出生在2014年的正月初一,他的生肖到底是属蛇还是属马呢?这就要确定那一天才是一年的开始。是春节还是立春?每年的春节是正月初一,但是生肖必须是从立春日开始计算。春节是1912年孙中山先生废除旧历,采用公元纪年之后的1914年,时任民国大总统的袁世凯颁布法令,每年的正月初一是春节,在此之前传统上都是以二十四节气的立春作为岁首。综上所属,2014年正月初一出生的应该是属蛇。
     
        既然知道了每年的立春日才是真正的生肖判断标准,那么怎么才能获取每年的立春日是多少呢?
     
        网上有这么一个计算立春日的公式:[Y*D+C]-L
        公式解读:Y:年数的后2位 D:常量0.2422 C:世纪值,21世纪是3.87 取整数减 L:闰年数。
        举例说明:2058年立春日期的计算步骤[58×.0.2422+3.87]-[(58-1)/4]=17-14=3,则2月3日立春
     
        这里提供JS计算每年立春日和生肖的接口,源码如下:
     1 /**
     2  * 该方法只能正确判定到2099年
     3  * @auther 黑MAO
     4  * @time 2014年7月19日
     5  */
     6 ;
     7 (function(window) {
     8 
     9     /**
    10      * 生肖构造函数,默认参数是当前日期
    11      * @param {Number} year 年
    12      * @param {Number} month 月
    13      * @param {Number} day 日
    14      */
    15     function Zodiac(year, month, day) {
    16         var date = new Date();
    17         this.year = year * 1 || date.getFullYear();
    18         this.month = month * 1 || date.getMonth();
    19         this.day = day * 1 || date.getDate();
    20     }
    21 
    22     Zodiac.constructor = Zodiac;
    23 
    24     /**
    25      * 获取C值
    26      * @return {Number} C
    27      */
    28     Zodiac.prototype.getC = function() {
    29         var _year = Math.floor(this.year / 100) + 1;
    30         var C;
    31 
    32         switch (_year) {
    33             case 20:
    34                 C = 4.6295;
    35                 break;
    36             case 21:
    37                 C = 3.87;
    38                 break;
    39             case 22:
    40                 C = 4.15;
    41                 break;
    42             default:
    43                 C = 3.87;
    44         }
    45         return C;
    46     }
    47 
    48     /**
    49      * 获取立春日 一般都在2月
    50      * @return {Number} springDay
    51      */
    52     Zodiac.prototype.getSpringDay = function() {
    53         var Y = this.year % 100,
    54             D = 0.2422,
    55             C = this.getC(),
    56             L = (Y - 1) / 4,
    57             springDay = 0;
    58         springDay = Math.floor(Y * D + C) - Math.floor((Y - 1) / 4);
    59         return springDay;
    60     }
    61 
    62     /**
    63      * 获取生肖
    64      * @return {String} myZodiac
    65      */
    66     Zodiac.prototype.getZodiac = function() {
    67         var year = this.year,
    68             month = this.month,
    69             day = this.day,
    70             zodiac = ['子鼠', '丑牛', '寅虎', '卯兔', '辰龙', '巳蛇', '午马', '未羊', '申猴', '酉鸡', '戌狗', '亥猪'],
    71             myPos = (year - 1900) % 12,
    72             myZodiac = zodiac[myPos],
    73             springDay = this.getSpringDay();
    74 
    75         switch (month) {
    76             case 1:
    77                 var _myPos = myPos - 1;
    78                 if (_myPos < 0) {
    79                     _myPos = 11;
    80                 }
    81                 myZodiac = zodiac[_myPos];
    82                 break;
    83             case 2:
    84                 if (day < springDay) {
    85                     var _myPos = myPos - 1;
    86                     if (_myPos < 0) {
    87                         _myPos = 11;
    88                     }
    89                     myZodiac = zodiac[_myPos];
    90                 }
    91                 break;
    92         }
    93         return myZodiac;
    94     }
    95 
    96     window.Zodiac = Zodiac;
    97 })(window);
    使用方法:
    //默认参数是当前日期
    var zodiac = new Zodiac();
    //var zodiac = new Zodiac(1980, 2, 3);
    //获取立春日
    console.log(zodiac.getSpringDay());
    //获取生肖
    console.log(zodiac.getZodiac());
    //可以与万年历进行比对可以计算你的真正生肖了~~
    for (var year = 1900; year < 2100; year++) {
        var zodiac = new Zodiac(year, 2, 4);
        console.log(year, zodiac.getSpringDay(), zodiac.getZodiac());
    }

    可以计算你的真正生肖了~~

    参考资料:https://www.cnblogs.com/xiaoheimiaoer/p/3854720.html

  • 相关阅读:
    5、python变量&运算符
    3、python数据类型之字符串操作
    4、python数据类型之列表&字典&元组
    1、python介绍与环境安装
    2、jmeter元件作用域&参数化&关联
    软件测试流程你知道多少?
    敏捷测试团队的测试流程
    jmeter多台机器如何做分布式压测,从那些方面考虑让压测结果更优,有效?
    python excel常用方法归纳总结
    python assert使用说明
  • 原文地址:https://www.cnblogs.com/tanxiang6690/p/14215256.html
Copyright © 2020-2023  润新知