zoukankan      html  css  js  c++  java
  • 计算当前日期星座

    计算当前日期星座

    起始月份 号数 星座 结束月份 号数 时间区间
    12 22 摩羯座 1 19 12/22 - 1/19
    1 20 水瓶座 2 18 1/20 - 2/18
    2 19 双鱼座 3 20 2/19 - 3/20
    3 21 白羊座 4 20 3/22 - 4/20
    4 21 金牛座 5 20 4/22 - 5/20
    5 21 双子座 6 21 5/22 - 6/21
    6 22 巨蟹座 7 22 6/22 - 7/22
    7 23 狮子座 8 22 7/22 - 8/22
    8 23 处女座 9 22 8/22 - 9/22
    9 23 天秤座 10 22 9/22 - 10/22
    10 23 天蝎座 11 21 10/22 - 11/21
    11 22 射手座 12 21 11/22 - 12/21
    12 22 摩羯座 1 19 12/22 - 1/19

    设计存储结构

    1.用一个数组来存储各个星座起始月与年份的对应关系,序号代表具体月份所对应的星座,0代表12月,1代表1月,-1代表12月
    c = [摩羯,水瓶, 双鱼,白羊,金牛,双子,巨蟹,狮子,处女,天秤,天蝎,射手,摩羯]
    
    2.用另外一个数组来存储年份与各个星座起始日期的对应关系,12.22是摩羯座的起始日期
    Date = [22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]
    
    

    计算公式

    1.如果当前的号数小于当前月份所对应的起始日期的号数,那我们的当前月数就要减1,如果是大于等于就直接使用当前月份即可
    
    2.假如我们将 2月18号 水瓶座传入Date数组,2月份是双鱼座的开始的月份,拿到的日期就是19号,18<19说明当前号的起始月份不再当前月,所以用2 - 1,得到水瓶座的起始月在1月份。假如传入的是2月19号,19 == 19刚好是双鱼座的起始日期,在当前月大于的号也是属于双鱼座,所以返回当前月份2即可
    
    3.startMonth = month - [ day < Date[month] ? 1 : 0]
    
    4.有了起始月份就可以找到对应的星座了
    c = [摩羯,水瓶, 双鱼,白羊,金牛,双子,巨蟹,狮子,处女,天秤,天蝎,射手,摩羯]
    c[startMonth]
    

    优化日期数组

    1.将数组的存储方式转换为字符串的存储方式,所以必须将日期列表中存储的起始号,变成个位数,起始日期中最小为19(双鱼座),最大为23(狮子座)
    
    day < Date[month]
    => day - x < Date[month] - x
    
    令y = Date[month]-x,计算x+y=19与x+y=23的交集,算出x的交集为14-19,x取最小14就可以y变成个位数
    
    x y x + y = 19 x y x + y =23
    10 9 14 9
    11 8 15 8
    12 7 16 7
    13 6 17 6
    14 5 18 5
    15 4 19 4
    16 3 20 3
    17 2 21 2
    18 1 22 1
    19 0 23 0
    Date = [22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]
    让Date - 14 将结果存入字符串'865778999988'
    
    利用隐式转换,如果day是起始月就返回True否则就返回False,如果day小于当前月所对应的起始星座,说明他的起始月在上个月True会转换为1,得到month-1,如果不小于False会转换为0,month-0还是得到当前month
    month - (day - 14 < '865778999988'.charAt(month))
    
    function getHoroscope(date) {
    	  let c = ['摩羯','水瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天秤','天蝎','射手','摩羯']
    	  date=new Date(date);
    	  let month = date.getMonth() + 1;
    	  let day = date.getDate();
    	  let startMonth = month - (day - 14 < '865778999988'.charAt(month));
    	  return c[startMonth]+'座';
    	},
        
    const date = new Date(2019,9,14);
    
  • 相关阅读:
    新发地突发新冠病例,我从北京来赶来为疾控软件开发人员分享Azure DevOps,汗
    Azure DevOps Server:还原被删除的分支
    Azure DevOps Server 拉取请求模板(Pull Request Template)
    Azure DevOps Server:使用Postman批量删除测试用例
    Visual Studio Code:在操作系统文件夹或文件上出现Open with Code菜单
    在Windows XP上访问Azure DevOps Server 2019(TFS)
    将团队项目迁移到另外一个团队项目集合中
    快速排序c++实现 快排C++代码实现
    高等代数(第四版) 王萼芳课后答案
    数据结构题集(C语言版)课后答案+源码严蔚敏、吴伟民编著
  • 原文地址:https://www.cnblogs.com/pluslius/p/11520780.html
Copyright © 2011-2022 走看看