通過日期計算星座

来源:https://www.cnblogs.com/ctmf/archive/2018/07/06/9274630.html
-Advertisement-
Play Games

分析和理解根據日期計算星座函數 本博客根據文章 "根據生日的月份和日期,一行代碼計算星座的js小函數(轉)" 原文出自CSDN "無心的專欄" 的文章,知識產權歸原文作者所有! | 起始月份 | 號數 | 星座 | 結束月份 | 號數 | 時間區間 | | : : | : : | : : | : : ...


分析和理解根據日期計算星座函數

本博客根據文章 根據生日的月份和日期,一行代碼計算星座的js小函數(轉) 原文出自CSDN 無心的專欄 的文章,知識產權歸原文作者所有!

起始月份 號數 星座 結束月份 號數 時間區間
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

一年12個月份
抽象一個數組

c = [摩羯,水瓶, 雙魚,白羊,金牛,雙子,巨蟹,獅子,處女,天秤,天蝎,射手,摩羯]

c 為月份列表
該數組中序號為 1 的水瓶座對應的起始月份為 1月
序號為 起始月份 或者 (結束月份 - 1)
日期所對應的星座 起始月份為日期所在月 或者 終結月份為該月(即起始月份為日期所在月-1)
為了得出日期對應的星座,我們通過日期來計算對應星座的起始月份

startMonth = month - [(day < Date[month]) ? 1 : 0]
c = [摩羯,水瓶, 雙魚,白羊,金牛,雙子,巨蟹,獅子,處女,天秤,天蝎,射手,摩羯]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Date = [22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]

startMonth - 計算後對應星座的起始月份;
Month - 日期對應的月份;
day - 日期對應的號數;
Date - 月份列表對應的日期列表;

解釋:
對應星座起始月份 = 當前月份 - [(當前日期是否小於對應月份的日期)是則為1,否則為0]
判斷(日期對應號數 < 起始月份為日期對應月份的星座的起始號數)
例子 2月18日 為水瓶座 2月19日 為雙子座
18 < 19 (19為2月的雙魚座的起始日期) 小於成立即 2 - 1 = 1 一月對應的星座為水瓶座
19 = 19 小於不成立, 2 - 0 = 2 所以為二月對應的星座 雙魚座

簡化列表 將日期列表取消
day < Date[month] =》 day - x < Date[month] - x
令 y = Date[month] - x ,y需要為個位數
現在起始日期對應的號數 最小為19號(雙魚座) 最大為23號(獅子座)
窮舉並且列出表格

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

兩列中x的交集為 14 -19
取x = 14

Date = [22, 20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]

date - 14
最後列表為8,6,5,7,7,8,9,9,9,9,8,8 => '865778999988'

startMonth = month - [(day < Date[month]) ? 1 : 0]
=> month - (day - 14 < '865778999988'.charAt(month))  
true 自動變為 1;  
true 自動變為 0;  
charAt為尋找字元串對應位置的str

最終代碼

var date = new Date(2017,1,12);
//設置日期
function getHoroscope(date) {
  var c = ['摩羯','水瓶','雙魚','白羊','金牛','雙子','巨蟹','獅子','處女','天秤','天蝎','射手','摩羯']
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var startMonth = month - (day - 14 < '865778999988'.charAt(month));
  return c[startMonth]
}
getHoroscope(date);
//水瓶

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 版權聲明:未經博主允許不得轉載 AsyncTask 瞭解AsyncTask非同步,需要瞭解一下非同步任務(多線程),什麼是線程,可以這麼說線程好比邊吃飯邊看電視,AsyncTask是為了方便後臺線程中操作更新UI,本質為Handler非同步消息處理機制。 學習AsyncTask需要知道它的參數,它要實現的 ...
  • 1.具體代碼: 服務端實現: 可以看到onTransact有四個參數 code , data ,replay , flags code 是一個整形的唯一標識,用於區分執行哪個方法,客戶端會傳遞此參數,告訴服務端執行哪個方法; data客戶端傳遞過來的參數; replay伺服器返回回去的值; flag ...
  • 沒有android support library下載項。 找了很多資料,發現 android support library 被Google廢棄了,不推薦使用。代替使用的是 android support repository 這是一個倉庫。 然後我查看了一下這個倉庫找到sdk的安裝路徑,比如我的 ...
  • 1、概述 Binder能幹什麼?Binder可以提供系統中任何程式都可以訪問的全局服務。這個功能當然是任何系統都應該提供的,下麵我們簡單看一下Android的Binder的框架 Android Binder框架分為伺服器介面、Binder驅動、以及客戶端介面;簡單想一下,需要提供一個全局服務,那麼全 ...
  • 一直覺得使用系統這個東西寫起來特別麻煩,每次都要寫一大推東西,還是重覆的,今天抽了點時間自己重新封裝了一下,解決了自己的強迫症。。。,不多說,直接上代碼了。 1.自己定義了一個名為XBZ的UIAlertViewControllerde 分類,.h文件裡面 2.然後是.m文件 3.調用方法,就統一寫到 ...
  • 這幾天一直在忙於其他項目,打開之前的項目,我曹,代碼什麼都沒動,為何莫名其妙的的就出現衝突了。(我猜測是依賴的其它三方庫,庫裡面的依賴發生改變導致的) 全是這種錯誤,各種衝突導致的,記錄一下,以下指示其中一種。 感覺無從下手,偶然得知一句命令可以得到本項目的"依賴樹",天助我也。 在Android ...
  • 在Redux源碼中主要有四個文件createStore,applyMiddleware,bindActionCreators,combineRedures createStore.js export default function createStore(reducer, preloadedSta ...
  • 對於this的使用,我們最常遇到的主要有,在全局函數中,在對象方法中,call和apply時,閉包中,箭頭函數中以及class中; 我們知道this對象是在運行時基於函數的執行環境綁定的,在調用函數之前,this的值並不確定,因此this會在代碼執行過程中引用不同的對象。哪個對象實例調用this所在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...