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í)^下面的部分碳褒,下面是工具的飛機票
獲取日期的方法可以直接從工具中得出,而且你還可以使用該工具得到其他的你想要的數(shù)據(jù)看疗。
獲取公歷對應農(nóng)歷日期的方法:
import solarLunar from 'solarLunar';
const solar2lunarData = solarLunar.solar2lunar(2015, 10, 8); // 輸入的日子為公歷
框架中的方法得到的數(shù)據(jù)和我想要的有些出入沙峻,我想要的結(jié)果是當前日期對應的是二十四節(jié)氣中的哪一個節(jié)氣,然后根據(jù)節(jié)氣取得對應的節(jié)氣圖片两芳,但是方法中得到的是某一年的某一個節(jié)氣對應的是某個月份的第幾天专酗,見下圖方法介紹:
獲取公歷日期對應節(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é)氣均無誤荒叶。
文章中如果有錯誤的地方碾阁,還請指教!
如果對你有所幫助些楣,點個贊唄脂凶!