根据生日的月份和日期,一行代码计算星座的js小函数(转)

看到了别人写的一个计算星座的js,冗长的有点儿看不过去,就自己写个了。
我想,这个函数应该足够精简了:)
什么 if 啊 switch 啊 for 啊 通通滚蛋了……
传入参数:month [int] 1~12;  day [int] 1~31。

// 根据生日的月份和日期,计算星座。 http://blog.csdn.net/cuixiping/

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行代码仍然可以进一步精简,再来改进一下:

// 根据生日的月份和日期,计算星座。  http://blog.csdn.net/cuixiping/
function getAstro(m,d){

return "魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯".substr(m*2-(d<"102223444433".charAt(m-1)- -19)*2,2);
}

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

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

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

// 根据生日的月份和日期,计算星座。  http://blog.csdn.net/cuixiping/
function getAstro(m,d){

return m-(d<"102223444433".charAt(m-1)- -19);   //输出0~12的数字,0表示摩羯,1表示水瓶,依此类推,...,11是射手,12是摩羯。
}

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

// 根据生日的月份和日期,计算星座。  http://blog.csdn.net/cuixiping/
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)

时间: 2024-11-09 10:52:05

根据生日的月份和日期,一行代码计算星座的js小函数(转)的相关文章

js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)

本博客根据 开源中国作者清风徐不来 的文章 根据生日的月份和日期,一行代码计算星座的js小函数(转) 原文出自CSDN 无心的专栏 的文章,知识产权归原文作者所有! 点击查看原文:js 日期计算星座

python实战===一行代码就能搞定的事情!

打印9*9乘法表: >>> print( '\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)])) 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6

一行代码比较用户A和用户B的年龄大小(两个日期计算)

两个日期计算 用法: <edate [id=书包名] [list]> <we start="开始日期" end="结束日期" [format="yyyy-MM-dd HH:mm:ss.SSS"]/> </edate> ·        id:书包名,EDate标签返回的书包名称,可选,为空时书包名为标签名edate ·        list:列表,可选,要不要列出从开始到结束的所有日期 ·        st

一行代码比较用户A和用户B的年龄大小(列出两个日期间的所有日期)

例1: 一行代码比较用户A和用户B的年龄大小,并列出用户A到用户B生日间的所有日期 <edate id=test list><we start="@{pPage:userABirthday}" end="@{pPage:userBBirthday}" format="yyyy-MM-dd" /></edate> 注意增加了一个list参数 输出计算出的日期列表 <b>用户A到用户B生日间的所有日期&

? 题目 一道超难的奥数题,猜生日. A告诉B他生日的月份,告诉C他生日的日期 B说:“如果我不知道A的生日,那C肯定也不知道.&quot; C说:”本来我不知道,现在我知道了.“ B说:”哦,那我也知道了.

现在的学生真是太生猛了,一道奥数题突破天际了.... 闲话少说,看题: 一道超难的奥数题,猜生日.A告诉B他生日的月份,告诉C他生日的日期B说:"如果我不知道A的生日,那C肯定也不知道."C说:"本来我不知道,现在我知道了."B说:"哦,那我也知道了."A的生日可能是:11月4日 11月5日 11月8日 1月4日 1月22日 3月1日 3月5日 7月1日7月2日 7月8日请问A的生日是几月几日? 附上某网友解答过程: 11月4日 11月5日 11

JS年月日三级联动下拉框日期选择代码

原博客网址: http://www.cnblogs.com/gdcgy/p/5467742.html 由于工作中涉及到生日编辑资料编辑,年月日用上面网址案例:bug提示: 编辑生日栏的[年]或者[月],之前保存的具体的[日]就不显示啦,产品说不管编辑哪个数据,其他数据不变: 然后自己改了一下代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xh

按月、按天计算失效日期的代码实现

按月.按天计算失效日期的代码实现 [背景]:在我们计算截止日期.失效时期的时候,可能存在按年.按月.按天统计失效的情况.比如:当前日期是2014-12-22,900天后失效,失效日期是多少?17个月后失效,失效日期是多少.通过本文源码,你都可以得到答案. 为验证程序的正确性,本文对每个接口函数都做了大量的测试用例. // sn_ctrl.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <assert.h> #incl

Postgresql合并年月日、月份和日期左侧补零

在写一个统计查询的 SQL 语句时,需要根据年.月.日分组,但要求返回的字段是日期格式:yyyy年MM月dd日.刚开始我的做法是返回年.月.日,然后再手动拼接年月日,而且还要判断月份和日期是否为个位数,是的话需要在左侧补零.项目经理看了我代码之后,告诉我直接可以在 SQL 中处理.下面是 SQL 语句: SELECT CAST(stats_year AS character varying) || '年' || lpad(CAST(stats_month AS character varying

一行代码实现时间戳转时间格式

https://segmentfault.com/a/1190000015992232?utm_source=tag-newest function time(time = +new Date()) { var date = new Date(time + 8 * 3600 * 1000); return date.toJSON().substr(0, 19).replace('T', ' ').replace('/-/g', '.');}console.log(time()); 前端开发过程中