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 相关文章推荐
火狐浏览器(firefox)下获得Event对象以及keyCode
Nov 13 Javascript
在JavaScript中监听IME键盘输入事件
May 29 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
Mar 18 Javascript
jQuery中$.fn的用法示例介绍
Nov 05 Javascript
js设置控件的隐藏与显示的两种方法
Aug 21 Javascript
JS常用函数使用指南
Nov 23 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
jQuery手风琴的简单制作
May 12 jQuery
js中时间格式化的几种方法
Jul 22 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
Jan 22 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
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php HandlerSocket的使用
2011/05/02 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
PHP编写RESTful接口
2016/02/23 PHP
简单实现php上传文件功能
2017/09/21 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
Python自定义线程类简单示例
2018/03/23 Python
Python遍历numpy数组的实例
2018/04/04 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
市级文明单位申报材料
2014/05/07 职场文书
咖啡店创业计划书
2014/08/15 职场文书
亮剑观后感500字
2015/06/05 职场文书
安全教育片观后感
2015/06/17 职场文书
人代会简报
2015/07/21 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书