react-native获取农历日期和二十四节气

react-native获取农历日期和二十四节气

这是做react-native开发以来写的第一篇文章,记录一下开始,以后还会有更多的文章发出来!


问题描述

开发中有这样的需求,要把当前的日期转化为农历日期或者根据当前的时间获取当前时间所对应的节气(如果当前时间不是节气则取值最近过去的一个节气)。在网上查了很多资料,大部分方法得出的结果与实际有些出入;也有些提供api查询数据,但需要异步请求,并且有次数限制。

所以我们需要一个简单、有效的方法。

npm上面有位牛人封装了一个获取农历数据(农历日期、生肖、天干地支等)的工具,感谢这位朋友,如果这个工具能满足你所有的需求,请跳过下面的部分,下面是工具的飞机票

npm solarlunar

获取日期的方法可以直接从工具中得出,而且你还可以使用该工具得到其他的你想要的数据。

获取公历对应农历日期的方法:

import solarLunar from 'solarLunar';
const solar2lunarData = solarLunar.solar2lunar(2015, 10, 8); // 输入的日子为公历

框架中的方法得到的数据和我想要的有些出入,我想要的结果是当前日期对应的是二十四节气中的哪一个节气,然后根据节气取得对应的节气图片,但是方法中得到的是某一年的某一个节气对应的是某个月份的第几天,见下图方法介绍:

image

获取公历日期对应节气的方法:

那么接下来的事情需要自己想办法,首先需要借助这个工具,使用npm命令 npm install --save solarlunar ,我是在windows平台上运行的react,命令与mac略微不同.
添加module,重新执行react-native run-android运行项目.
(PS:如果不用这个工具可以执行 npm uninstall solarlunar卸载)

因为每个月对应的是两个节气,所以我们可以根据日期来判断是哪一个节气,以下是我获取当前日期对应的节气的方法:

/**
     * 获取是哪一个二十四节气
     * */
    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('节气对应的日期:i = '+i+'   day ='+solarlunar.getTerm(year, i));
            arr.push(solarlunar.getTerm(year, i));
        }
        for (let i = 0; i < arr.length; i++) {
            console.log('节气对应的日期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;//年末的冬至
        }
    }

注意遍历获取当年所有节气日期的时候,是从1开始:

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

在返回节气对应的位置后,我们可以根据对应位置取得对应的节气图片:

第一步:申明图片数组,依次为从小寒到冬至的图片

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()]}/>

至此,获取当前日期对应的节气图片完成。
以上是我获取节气的方法,测试的2019、2020年节气均无误。
文章中如果有错误的地方,还请指教!
如果对你有所帮助,点个赞呗!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335