import React, { useState } from 'react' import calendar from 'js-calendar-converter' const j = ['立春', '惊蛰', '清明', '立夏', '芒种', '小暑', '立秋', '白露', '寒露', '立冬', '大雪', '小寒'] const News = () => { const formatDate = (date) => { const year = date.getFullYear() const month = date.getMonth() + 1 const day = date.getDate() const hour = date.getHours() const minute = date.getMinutes() const lunarDate = calendar.solar2lunar(year, month, day) console.log(lunarDate) return `${year}年${month}月${day}日 ${hour}时${minute}分` } const handleConfirm = (val) => { formatDate(val) } return ( <div> <DatePicker onConfirm={handleConfirm} /> </div> ) } 以上代码里,变量j里的内容为十二节气。 打印lunarDate结果显示有很多参数,包括参数Term代表某一节气的名称,参数cYear代表当前选中的阳历年份,参数cMonth代表当前选中的阳历月份,cDay代表当前选中的阳历日期,参数date代表当前选中的阳历年月日。 使用react、es6语法和Hook修改以上代码,实现以下效果:当在DatePicker里选中任意一天后,打印出该天上个月、本月和下个月的节气对应的阳历日期。
时间: 2023-12-10 22:39:28 浏览: 104
react-一款基于react的日历组件
可以按照以下步骤修改代码:
1. 在组件中使用useState钩子来存储选中的日期和节气信息。
2. 在handleConfirm函数中,将选中的日期和对应的节气信息保存到useState中。
3. 使用useEffect钩子来监听选中的日期和节气信息的变化,当有变化时,计算上个月、本月和下个月的节气对应的阳历日期,并将结果打印出来。
以下是修改后的代码:
```
import React, { useState, useEffect } from 'react';
import calendar from 'js-calendar-converter';
import DatePicker from './DatePicker';
const j = ['立春', '惊蛰', '清明', '立夏', '芒种', '小暑', '立秋', '白露', '寒露', '立冬', '大雪', '小寒'];
const News = () => {
const [selectedDate, setSelectedDate] = useState(null);
const [selectedJieQi, setSelectedJieQi] = useState(null);
const formatDate = (date) => {
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hour = date.getHours();
const minute = date.getMinutes();
const lunarDate = calendar.solar2lunar(year, month, day);
const jieqi = j[lunarDate.Term - 1];
setSelectedDate(date);
setSelectedJieQi(jieqi);
};
useEffect(() => {
if (selectedDate && selectedJieQi) {
const year = selectedDate.getFullYear();
const month = selectedDate.getMonth() + 1;
const lastMonth = month === 1 ? 12 : month - 1;
const nextMonth = month === 12 ? 1 : month + 1;
const lastMonthJieQi = j[(lastMonth * 2 - 2) % 24];
const thisMonthJieQi = selectedJieQi;
const nextMonthJieQi = j[(nextMonth * 2 - 2) % 24];
const lastMonthDate = calendar.getTermDate(year, lastMonthJieQi);
const thisMonthDate = calendar.getTermDate(year, thisMonthJieQi);
const nextMonthDate = calendar.getTermDate(year, nextMonthJieQi);
console.log(`${lastMonthJieQi}对应的阳历日期为${lastMonthDate}`);
console.log(`${thisMonthJieQi}对应的阳历日期为${thisMonthDate}`);
console.log(`${nextMonthJieQi}对应的阳历日期为${nextMonthDate}`);
}
}, [selectedDate, selectedJieQi]);
return (
<div>
<DatePicker onConfirm={formatDate} />
</div>
);
};
export default News;
```
阅读全文