react-native獲取農(nóng)歷日期和二十四節(jié)氣

react-native獲取農(nóng)歷日期和二十四節(jié)氣

這是做react-native開發(fā)以來寫的第一篇文章周瞎,記錄一下開始显设,以后還會有更多的文章發(fā)出來框弛!


問題描述

開發(fā)中有這樣的需求檀咙,要把當前的日期轉(zhuǎn)化為農(nóng)歷日期或者根據(jù)當前的時間獲取當前時間所對應的節(jié)氣(如果當前時間不是節(jié)氣則取值最近過去的一個節(jié)氣)凸丸。在網(wǎng)上查了很多資料很钓,大部分方法得出的結(jié)果與實際有些出入广匙;也有些提供api查詢數(shù)據(jù)允趟,但需要異步請求,并且有次數(shù)限制鸦致。

所以我們需要一個簡單潮剪、有效的方法涣楷。

npm上面有位牛人封裝了一個獲取農(nóng)歷數(shù)據(jù)(農(nóng)歷日期、生肖抗碰、天干地支等)的工具狮斗,感謝這位朋友,如果這個工具能滿足你所有的需求弧蝇,請?zhí)^下面的部分碳褒,下面是工具的飛機票

npm solarlunar

獲取日期的方法可以直接從工具中得出,而且你還可以使用該工具得到其他的你想要的數(shù)據(jù)看疗。

獲取公歷對應農(nóng)歷日期的方法:

import solarLunar from 'solarLunar';
const solar2lunarData = solarLunar.solar2lunar(2015, 10, 8); // 輸入的日子為公歷

框架中的方法得到的數(shù)據(jù)和我想要的有些出入沙峻,我想要的結(jié)果是當前日期對應的是二十四節(jié)氣中的哪一個節(jié)氣,然后根據(jù)節(jié)氣取得對應的節(jié)氣圖片两芳,但是方法中得到的是某一年的某一個節(jié)氣對應的是某個月份的第幾天专酗,見下圖方法介紹:

image

獲取公歷日期對應節(jié)氣的方法:

那么接下來的事情需要自己想辦法,首先需要借助這個工具盗扇,使用npm命令 npm install --save solarlunar 祷肯,我是在windows平臺上運行的react,命令與mac略微不同.
添加module,重新執(zhí)行react-native run-android運行項目.
(PS:如果不用這個工具可以執(zhí)行 npm uninstall solarlunar卸載)

因為每個月對應的是兩個節(jié)氣疗隶,所以我們可以根據(jù)日期來判斷是哪一個節(jié)氣佑笋,以下是我獲取當前日期對應的節(jié)氣的方法:

/**
     * 獲取是哪一個二十四節(jié)氣
     * */
    static getCurrentJQ() {
        let date = new Date();
        let year = date.getFullYear();
        let month = date.getMonth() + 1;
        let day = date.getDate();
        const arr = [];
        console.log('當前的日期:'+day);
        for (let i = 1; i < 25; i++) {
            console.log('節(jié)氣對應的日期:i = '+i+'   day ='+solarlunar.getTerm(year, i));
            arr.push(solarlunar.getTerm(year, i));
        }
        for (let i = 0; i < arr.length; i++) {
            console.log('節(jié)氣對應的日期22222:i = '+i+'   day ='+arr[i]);
        }
        if ((month === 1 && day < arr[0])) {
            return 23;//年初的冬至
        } else if (month === 1 && (day >= arr[0] && day < arr[1])) {
            return 0;//小寒
        }
        else if (month === 2 && (day >= arr[2] && day < arr[3])) {
            return 2;//立春
        }
        else if (month === 3 && (day >= arr[4] && day < arr[5])) {
            return 4;//驚蟄
        }
        else if (month === 4 && (day >= arr[6] && day < arr[7])) {
            return 6;//清明
        }
        else if (month === 5 && (day >= arr[8] && day < arr[9])) {
            return 8;//立夏
        }
        else if (month === 6 && (day >= arr[10] && day < arr[11])) {
            return 10;//芒種
        }
        else if (month === 7 && ((day >= arr[12] && day < arr[13]))) {
            return 12;//小暑
        }
        else if (month === 8 && (day >= arr[14] && day < arr[15])) {
            return 14;//立秋
        }
        else if (month === 9 && (day >= arr[16] && day < arr[17])) {
            return 16;//白露
        }
        else if (month === 10 && (day >= arr[18] && day < arr[19])) {
            return 18;//寒露
        }
        else if (month === 11 && (day >= arr[20] && day < arr[21])) {
            return 20;//立冬
        }
        else if (month === 12 && (day >= arr[22] && day < arr[23])) {
            return 22;//大雪
        }
        else if ((month === 1 && (day >= arr[1]) || (month === 2 && day < arr[2]))) {
            return 1;//大寒
        }
        else if ((month === 2 && day >= arr[3]) || (month === 3 && day < arr[4])) {
            return 3;//雨水
        }
        else if ((month === 3 && day >= arr[5]) || (month === 4 && day < arr[6])) {
            return 5;//春分
        }
        else if ((month === 4 && day >= arr[7]) || (month === 5 && day < arr[8])) {
            return 7;//谷雨
        }
        else if ((month === 5 && day >= arr[9]) || (month === 6 && day < arr[10])) {
            return 9;//小滿
        }
        else if ((month === 6 && day >= arr[11]) || (month === 7 && day < arr[12])) {
            return 11;//夏至
        }
        else if ((month === 7 && day >= arr[13]) || (month === 8 && day < arr[14])) {
            return 13;//大暑
        }
        else if ((month === 8 && day >= arr[15]) || (month === 9 && day < arr[16])) {
            return 15;//處暑
        }
        else if ((month === 9 && day >= arr[17]) || (month === 10 && day < arr[18])) {
            return 17;//秋分
        }
        else if ((month === 10 && day >= arr[19]) || (month === 11 && day < arr[20])) {
            return 19;//霜降
        }
        else if ((month === 11 && day >= arr[21]) || (month === 12 && day < arr[22])) {
            return 21;//小雪
        }
        else if ((month === 12 && day >= arr[23])) {
            return 23;//年末的冬至
        }
    }

注意遍歷獲取當年所有節(jié)氣日期的時候,是從1開始:

const arr = [];
 for (let i = 1; i < 25; i++) {
       arr.push(solarlunar.getTerm(year, i));
 }

在返回節(jié)氣對應的位置后斑鼻,我們可以根據(jù)對應位置取得對應的節(jié)氣圖片:

第一步:申明圖片數(shù)組蒋纬,依次為從小寒到冬至的圖片

let imageSrcArray = [require('../../res/images/pic_term_1.jpg'), require('../../res/images/pic_term_2.jpg'),
            require('../../res/images/pic_term_3.jpg'), require('../../res/images/pic_term_4.jpg'),
            require('../../res/images/pic_term_5.jpg'), require('../../res/images/pic_term_6.jpg'),
            require('../../res/images/pic_term_7.jpg'), require('../../res/images/pic_term_8.jpg'),
            require('../../res/images/pic_term_9.jpg'), require('../../res/images/pic_term_10.jpg'),
            require('../../res/images/pic_term_11.jpg'), require('../../res/images/pic_term_12.jpg'),
            require('../../res/images/pic_term_13.jpg'), require('../../res/images/pic_term_14.jpg'),
            require('../../res/images/pic_term_15.jpg'), require('../../res/images/pic_term_16.jpg'),
            require('../../res/images/pic_term_17.jpg'), require('../../res/images/pic_term_18.jpg'),
            require('../../res/images/pic_term_19.jpg'), require('../../res/images/pic_term_20.jpg'),
            require('../../res/images/pic_term_21.jpg'), require('../../res/images/pic_term_22.jpg'),
            require('../../res/images/pic_term_23.jpg'), require('../../res/images/pic_term_24.jpg')];

第二步:賦值給source

<Image
                    style={styles.image}
                    source={imageSrcArray[TimeUtils.getCurrentJQ()]}/>

至此,獲取當前日期對應的節(jié)氣圖片完成坚弱。
以上是我獲取節(jié)氣的方法蜀备,測試的2019、2020年節(jié)氣均無誤荒叶。
文章中如果有錯誤的地方碾阁,還請指教!
如果對你有所幫助些楣,點個贊唄脂凶!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市愁茁,隨后出現(xiàn)的幾起案子蚕钦,更是在濱河造成了極大的恐慌,老刑警劉巖鹅很,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘶居,死亡現(xiàn)場離奇詭異,居然都是意外死亡促煮,警方通過查閱死者的電腦和手機邮屁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門整袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人樱报,你說我怎么就攤上這事葬项。” “怎么了迹蛤?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵民珍,是天一觀的道長。 經(jīng)常有香客問我盗飒,道長嚷量,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任逆趣,我火速辦了婚禮蝶溶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宣渗。我一直安慰自己抖所,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布痕囱。 她就那樣靜靜地躺著田轧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞍恢。 梳的紋絲不亂的頭發(fā)上傻粘,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音帮掉,去河邊找鬼弦悉。 笑死,一個胖子當著我的面吹牛蟆炊,可吹牛的內(nèi)容都是我干的稽莉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼盅称,長吁一口氣:“原來是場噩夢啊……” “哼肩祥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缩膝,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岸霹,沒想到半個月后疾层,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡贡避,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年痛黎,在試婚紗的時候發(fā)現(xiàn)自己被綠了予弧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡湖饱,死狀恐怖掖蛤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情井厌,我是刑警寧澤蚓庭,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站仅仆,受9級特大地震影響器赞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墓拜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一港柜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咳榜,春花似錦夏醉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贸辈,卻和暖如春释树,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擎淤。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工奢啥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘴拢。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓桩盲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親席吴。 傳聞我的和親對象是個殘疾皇子赌结,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348