JS根据生日月份和日期计算星座的简单实现方法


Posted in Javascript onNovember 24, 2016

本文实例讲述了JS根据生日月份和日期计算星座的简单实现方法。分享给大家供大家参考,具体如下:

看到了别人写的一个计算星座的js,冗长的有点儿看不过去,就自己写个了。

我想,这个函数应该足够精简了:)

什么 if 啊 switch 啊 for 啊 通通滚蛋了……

传入参数:month [int] 1~12;  day [int] 1~31。

// 根据生日的月份和日期,计算星座。
function getAstro(month,day){
  var s="魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯";
  var arr=[20,19,21,21,21,22,23,23,23,23,22,22];
  return s.substr(month*2-(day<arr[month-1]?2:0),2);
}

如果你在网上搜“日期 星座 函数”,除了我的或转载我的代码之外,几乎都是长长的代码,恐怕不能找到比上面更简洁的代码了。

不过这上面3行代码仍然可以进一步精简,再来改进一下:

// 根据生日的月份和日期,计算星座。
function getAstro(m,d){
  return "魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯".substr(m*2-(d<"102223444433".charAt(m-1)- -19)*2,2);
}

是不是很酷呢,只有一行代码了,而且最大限度的精简了。

上面用到了一个substr函数和一个charAt函数,如果不考虑IE,那么.charAt(m-1)甚至可以精简为[m-1]

如果不需要输出星座名称而只需要星座数字索引,前面的字符串也可以省去,看起来就像这样:

// 根据生日的月份和日期,计算星座。
function getAstro(m,d){
  return m-(d<"102223444433".charAt(m-1)- -19);  //输出0~12的数字,0表示摩羯,1表示水瓶,依此类推,...,11是射手,12是摩羯。
}

下面写一段测试代码来验证:

// 根据生日的月份和日期,计算星座。
function getAstro(m,d){
  return "魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯".substr(m*2-(d<"102223444433".charAt(m-1)- -19)*2,2);
}
//下面写一个测试函数
function test(m,d){
document.writeln(m+"月"+d+"日 "+getAstro(m,d));
}
//测试
test(12,21); //输出: 12月21日 射手
test(12,22); //输出: 12月22日 魔羯
test(1,1);   //输出: 1月1日 魔羯
test(2,18);  //输出: 2月18日 水瓶
test(2,19);  //输出: 2月19日 双鱼

附十二星座日期对照:

魔羯座(12/22 - 1/19)、水瓶座(1/20 - 2/18)、双鱼座(2/19 - 3/20)、牡羊座(3/21 - 4/20)、
金牛座(4/21 - 5/20)、双子座(5/21 - 6/21)、巨蟹座(6/22 - 7/22)、狮子座(7/23 - 8/22)、
处女座(8/23 - 9/22)、天秤座(9/23 - 10/22)、天蝎座(10/23 - 11/21)、射手座(11/22 - 12/21)

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
一个cssQuery对象 javascript脚本实现代码
Jul 21 Javascript
jquery dialog键盘事件代码
Aug 01 Javascript
Js参数值中含有单引号或双引号问题的解决方法
Nov 06 Javascript
js函数调用的方式
May 06 Javascript
Node.js(安装,启动,测试)
Jun 09 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
轻松实现jquery手风琴效果
Jan 14 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
Vue用v-for给src属性赋值的方法
Mar 03 Javascript
vue 使用高德地图vue-amap组件过程解析
Sep 07 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
Sep 17 Javascript
javascript简单进制转换实现方法
Nov 24 #Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 #Javascript
详解Node.js:events事件模块
Nov 24 #Javascript
详解微信小程序开发之下拉刷新 上拉加载
Nov 24 #Javascript
微信小程序-消息提示框实例
Nov 24 #Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 #Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 #Javascript
You might like
phpcms中的评论样式修改方法
2016/10/21 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Python中的高级数据结构详解
2015/03/27 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
卖房协议书
2014/04/11 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
Vue深入理解插槽slot的使用
2022/08/05 Vue.js