计算当前日期星座

计算当前日期星座

起始月份 号数 星座 结束月份 号数 时间区间
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);

原文地址:https://www.cnblogs.com/pluslius/p/11520780.html

时间: 2024-08-06 01:35:11

计算当前日期星座的相关文章

JS下计算当前日期(当天)后N天出现NAN或者undefined的情况

前言: 帮客户做一个订单系统,需要一个日期1,一个日期2,默认情况下日期1为当天,日期2为明天,只是当时有些疑惑的是日期2偶尔会出现NAN的情况,今天在segmentfault.com看到了同样的问题,于是我觉得有必要再重温一下当时的问题.好好做一下到底是为什么? <!--date() NAN start--> 以下代码有问题,不建议直接使用,只是临时版本,后续再修改 <!DOCTYPE html> <html lang="en"> <head

计算当前日期是一年中的第几周

public static void main(String[] args) { Calendar gc = Calendar.getInstance(); int week=gc.get(Calendar.WEEK_OF_YEAR);//返回一年中的第几周 System.out.print(week); } 计算包含日期的周 public static void main(String[] args) { SimpleDateFormat format = new java.text.Simp

给定公历日期计算12星座(Java代码实现)

给定公历日期,计算返回该日期对应的十二星座. public static String getXingZuoName(int month, int day); 注意:参数month和day均为公历月.日. 返回的中文星座名如:处女座. import java.util.Map; import java.util.HashMap; import java.util.ArrayList; import java.util.List; //import android.util.Log; public

js计算当前日期上一个月和下一个月

/**         * 获取上一个月         *         * @date 格式为yyyy-mm-dd的日期,如:2014-01-25         */        function getPreMonth(date) {            var arr = date.split('-');            var year = arr[0]; //获取当前日期的年份            var month = arr[1]; //获取当前日期的月份   

C#计算当前日期为一年中的第几周

方法一: private   int   WeekOfYear(string   date) { DateTime   curDay   =   Convert.ToDateTime(date); int   firstdayofweek   =   Convert.ToInt32(Convert.ToDateTime(curDay.Year.ToString()   +   "- "   +   "1-1 ").DayOfWeek); int   days   =

计算字段示例

计算字段示例 ArcGIS 10 使用键盘输入值并不是编辑表中值的唯一方式.在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算.您可以对所有记录或选中记录执行简单计算和高级计算.此外,还可以在属性表中的字段上计算面积.长度.周长和其他几何属性.以下各部分包括使用字段计算器的若干示例.计算可以通过 Python 或 VBScript 执行. Python 是 ArcGIS 建议使用的脚本语言.如果要访问地理处理功能(包括要素几何),请使用Python.采用 Python 作为

MySQL当中的闰月最后一天的计算问题

在日期的计算当中会出现一个奇怪的问题: 如果当前日期是闰年的2月29日,那么对当前的日期+ N 年,那么相应的日期变为2月28日.但是这不符合我们的常识,按照常识,当只有28天的时候,时间应该顺延一天,变为3月1日. 例如下面的SQL带么用来计算,今年的生日日期: select name,birthday,NOW(), DATE_ADD(birthday1, INTERVAL IF(DAY(birthday)=29 && DAY(birthday1)=28,1,0) DAY) as bir

sqlserver计算日期

在网上找到的一篇文章,相当不错哦O(∩_∩)O~ 这是计算一个月第一天的SQL 脚本:  SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0) --上个月的第一天 SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))  --当月的最后一天 SELECT DATEAD

SQL Server日期计算

通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天.你们大部分人大概都知道怎样把日期进行分割(年.月.日等),然后仅仅用分割出来的年.月.日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期. 在使用本文中的例子之前,你必须注意以下的问题.大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定.第一