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计算每年立春日和生肖的接口,源码如下:

/**
 * 该方法只能正确判定到2099年
 * @auther 黑MAO
 * @time 2014年7月19日
 */
;(function(window){

 /**
  * 生肖构造函数,默认参数是当前日期
  * @param {Number} year 年
  * @param {Number} month 月
  * @param {Number} day 日
  */
 function Zodiac(year, month, day) {
  var date = new Date();
  this.year = year*1 || date.getFullYear();
  this.month = month*1 || date.getMonth();
  this.day = day*1 || date.getDate();
 }

 Zodiac.constructor = Zodiac;

 /**
  * 获取C值
  * @return {Number} C
  */
 Zodiac.prototype.getC = function(){
  var _year = Math.floor(this.year/100)+1;
  var C;

  switch(_year){
   case 20:
    C = 4.6295;
    break;
   case 21:
    C = 3.87;
    break;
   case 22:
    C = 4.15;
    break;
   default:
    C = 3.87;
  }
  return C;
 }

 /**
  * 获取立春日 一般都在2月
  * @return {Number} springDay
  */
 Zodiac.prototype.getSpringDay = function(){
  var Y = this.year%100,
   D = 0.2422,
   C = this.getC(),
   L = (Y-1)/4,
   springDay = 0;
  springDay = Math.floor(Y*D+C)-Math.floor((Y-1)/4);
  return springDay;
 }

 /**
  * 获取生肖
  * @return {String} myZodiac
  */
 Zodiac.prototype.getZodiac = function(){
  var year = this.year,
   month = this.month,
   day = this.day,
   zodiac = [‘子鼠‘,‘丑牛‘,‘寅虎‘,‘卯兔‘,‘辰龙‘,‘巳蛇‘,‘午马‘,‘未羊‘,‘申猴‘,‘酉鸡‘,‘戌狗‘,‘亥猪‘],
   myPos = (year-1900)%12,
   myZodiac = zodiac[myPos],
   springDay = this.getSpringDay();

  switch(month){
   case 1:
    var _myPos = myPos-1;
    if(_myPos<0){
     _myPos = 11;
    }
    myZodiac = zodiac[_myPos];
    break;
   case 2:
    if(day < springDay){
     var _myPos = myPos-1;
     if(_myPos<0){
      _myPos = 11;
     }
     myZodiac = zodiac[_myPos];
    }
    break;
  }
  return myZodiac;
 }

 window.Zodiac = Zodiac;
})(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());
 }

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

参考资料:

http://www.360doc.com/content/11/0106/22/5281066_84591519.shtml

http://www.baike.com/wiki/立春日

JS帮你计算属相

时间: 2024-11-03 22:00:57

JS帮你计算属相的相关文章

js实现的计算两个时间之间的时间差

js实现的计算两个时间之间的时间差:在实际应用中,需要计算两个时间点之间的差距,一般来说都是计算当前时间和一个指定时间点之间的差距,并且有时候需要精确到天.小时.分钟和秒,下面就简单介绍一下如何实现此效果.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.

js字符串长度计算(一个汉字==两个字符)和字符串截取

js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\xff]/g, "**").length; // [^\x00-\xff] - 匹配非双字节的字符 }; String.prototype.realSubstring = function(n){ var str = this||''; if(this.realLength()<=n

从百度地图API中抠出来的一个js方法,计算百度地图坐标距离

从百度地图api(http://developer.baidu.com/map/jsdemo.htm#a6_1)中抠出来的一个js方法,计算百度地图坐标距离 可读行还没还原,能用就行~ function fD(a, b, c) { for (; a > c;) a -= c - b; for (; a < b;) a += c - b; return a; }; function jD(a, b, c) { b != null && (a = Math.max(a, b));

number-precision Js高精度数学计算Npm包

这两天在用node编写一个有关于金融计算的自动脚本,传输的内容包含了2位小数的加减计算,由于JS自身的计算原因,所以找到了这个数据计算包number-precision非常的好用,使用方法见链接 http://npm.taobao.org/package/number-precision 原文地址:https://www.cnblogs.com/aboys/p/11548202.html

C#编程实践–帮老婆计算产假方案

摘要 今天中午午休时,和老婆聊天,老婆还过几天就要请产假了,她在网上问我让我帮她数一下该怎么请假最划算,老婆是个会过日子的人,面对此种要求我当然义不容辞,不过想到这个问题我的第一反应是:这个怎么可以用数的呢?于是,我开始去了解2014年上海市最新的产假政策规定,大致概况如下:“产假加上晚育假一共128天,其中前面98天是正常产假,其中已经包括国家法定节日和双休日,后面30天是晚育假,只包含双休日,不包含国家法定节日,也就是说遇到国家法定节日则假期往后顺延”,注意黑体粗字描述,可以知道这里面的精打

js浮点数的计算总结

在js浮点值的计算中,很多时候会出现不准确的情况,如下面的情况 console.log(2.2 + 2.1) // 4.300000000000001 console.log(2.2 - 1.9) // 0.30000000000000027 console.log(2.2 * 2.2) // 4.840000000000001 console.log(2.1 / 0.3) // 7.000000000000001 console.log(10 - 9.99) // 0.009999999999

js float浮点数计算精度问题

/** * floatObj 包含加减乘除四个方法,能确保浮点数运算不丢失精度 * * 我们知道计算机编程语言里浮点数计算会存在精度丢失问题(或称舍入误差),其根本原因是二进制和实现位数限制有些数无法有限表示 * 以下是十进制小数对应的二进制表示 * 0.1 >> 0.0001 1001 1001 1001…(1001无限循环) * 0.2 >> 0.0011 0011 0011 0011…(0011无限循环) * 计算机里每种数据类型的存储是一个有限宽度,比如 JavaScrip

Ember.js 入门指南——计算属性(compute properties)

本系列文章全部从(http://ibeginner.sinaapp.com/)迁移过来,欢迎访问原网站. 1,简单的计算属性 简单地来说,计算属性就是将函数声明为属性.其实就是就是在类扩展的时候为类定义的属性. Person = Ember.Object.extend({     firstName: null,     lastName: null,         //  fullName 就是一个计算属性     fullName: Ember.computed('firstName', 

js根据经纬度计算两点距离

根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,两极和高