react月份选择控件_一款很实用的ReactJS日期范围选择控件
JavaScript
语言:
JaveScriptBabelCoffeeScript
确定
'use strict';
const Heading = ({date, changeMonth, resetDate}) => (
changeMonth(date.month() - 1)}>‹
resetDate()}>{date.format('MMMM')} {date.format('YYYY')}
changeMonth(date.month() + 1)}>›
);
const Day = ({currentDate, date, startDate, endDate, onClick}) => {
let className = [];
if (moment().isSame(date, 'day')) {
className.push('active');
}
if (date.isSame(startDate, 'day')) {
className.push('start');
}
if (date.isBetween(startDate, endDate, 'day')) {
className.push('between');
}
if (date.isSame(endDate, 'day')) {
className.push('end');
}
if (! date.isSame(currentDate, 'month')) {
className.push('muted');
}
return (
onClick(date)} currentDate={date} className={className.join(' ')}>{date.date()}
)
};
const Days = ({date, startDate, endDate, onClick}) => {
const thisDate = moment(date);
const daysInMonth = moment(date).daysInMonth();
const firstDayDate = moment(date).startOf('month');
const previousMonth = moment(date).subtract(1, 'month');
const previousMonthDays = previousMonth.daysInMonth();
const nextsMonth = moment(date).add(1, 'month');
let days = [];
let labels = [];
for (let i = 1; i <= 7; i++) {
labels.push({moment().day(i).format('ddd')});
}
for (let i = firstDayDate.day(); i > 1; i--) {
previousMonth.date(previousMonthDays - i + 2);
days.push(
onClick(date)} currentDate={date} date={moment(previousMonth)} startDate={startDate} endDate={endDate} />
);
}
for (let i = 1; i <= daysInMonth; i++) {
thisDate.date(i);
days.push(
onClick(date)} currentDate={date} date={moment(thisDate)} startDate={startDate} endDate={endDate} />
);
}
const daysCount = days.length;
for (let i = 1; i <= (42 - daysCount); i++) {
nextsMonth.date(i);
days.push(
onClick(date)} currentDate={date} date={moment(nextsMonth)} startDate={startDate} endDate={endDate} />
);
}
return (
{labels.concat()}
{days.concat()}
);
};
class Calendar extends React.Component {
constructor(props) {
super(props);
this.state = {
date: moment(),
startDate: moment().subtract(5, 'day'),
endDate: moment().add(3, 'day')
};
}
resetDate() {
this.setState({
date: moment()
});
}
changeMonth(month) {
const {date} = this.state;
date.month(month);
this.setState(
date
);
}
changeDate(date) {
let {startDate, endDate} = this.state;
if (startDate === null || date.isBefore(startDate, 'day') || ! startDate.isSame(endDate, 'day')) {
startDate = moment(date);
endDate = moment(date);
} else if (date.isSame(startDate, 'day') && date.isSame(endDate, 'day')) {
startDate = null;
endDate = null;
} else if (date.isAfter(startDate, 'day')) {
endDate = moment(date);
}
this.setState({
startDate,
endDate
});
}
render() {
const {date, startDate, endDate} = this.state;
return (
this.changeMonth(month)} resetDate={() => this.resetDate()} />
this.changeDate(date)} date={date} startDate={startDate} endDate={endDate} />
);
}
}
ReactDOM.render(
,
document.getElementById('calendar')
)
react月份选择控件_一款很实用的ReactJS日期范围选择控件相关推荐
- Connectify是一款很实用的免费软件。能把计算机变成一个无线路由器
Connectify是一款很实用的免费软件.能把计算机变成一个无线路由器.它能通过您计算机上的无线网卡发射一个无线AP,让有WiFi功能的设备(手机.笔记本)上网.3.0版以前仅支持32位Window ...
- 黑苹果找不到触控板_苹果高管告诉你为何要添加触控板功能
鉴于美国持续不断的冠状病毒爆发,苹果未能在线下举办发布会,而且大多数媒体也都提前拿不到苹果的设备,所以"上手"就只能交给苹果的高管了. 苹果软件工程高管克雷格·费德里希就制作了一段 ...
- react 拖拽连接插件_一款精美的 react 后台管理系统
众里寻他千百度,蓦然回首,那人却在,灯火阑珊处.这么好的react开源项目,值得珍藏了! 项目依赖模块 项目是用create-react-app创建的,依赖包如下: react(是一个用于构建用户界面 ...
- 3w最简单led灯电路图_一款简单实用的LED灯驱动电路
LED照明集低功耗.长寿命等优点,正日益广受欢迎.随着价格的不断下降,LED已开始在家庭照明中得以应用.最近接触了几款市售的36头.60头LED灯,耗电仅3w左右,亮度相当于10w白炽灯,很省电. 可 ...
- qos 流控功能_怎么设置飞鱼星QoS流量控制中的传统流控
飞鱼星Volans公司致力于提供智能易用的网络通讯产品与服务,其通过创新技术不断提升网络使用质量,那么你知道怎么设置飞鱼星QoS流量控制中的传统流控吗?下面是学习啦小编整理的一些关于怎么设置飞鱼星Qo ...
- java 有选择的查询_如何在Java中将准备好的语句用于选择查询?
我已经使用预备语句尝试了几次,但是它返回SQL异常.这是我的代码: public ArrayList name(String mobile, String password) { ArrayList ...
- modbus 0x06 连续写_这篇很实用,看完学会MODBUS的应用及编程
现为大家讲解一下MODBUS的应用,现在工业控制上位机和下位机通信大部分采用通信协议为MODBUS,可想而知机器与机器通信的重要性. 一.MODBUS系统框架图 二.MODBUS运用 MODBUS 通 ...
- 推荐五款很实用却比较冷门的电脑软件
在我们日常使用电脑的过程中,常会有各种各样的需求,今天为大家推荐了五款小众但是非常实用的软件,希望会对你有所帮助. 1.GifCam GifCam是一款用户可自由视频录制和剪辑相结合的动画制作软件,此 ...
- 推荐几款很实用画图工具
目录 一.ProcessOn 二.Excalidraw 三.draw.io 四.语雀 五.XMind 六.Carbon 七.Visio 一.ProcessOn ProcessOn 是一个在线协作绘图平 ...
最新文章
- vi profile
- Disucz!高级幻灯片制作
- 皮一皮:皇上,他在下毒!
- 使用Skywalking实现全链路监控
- 日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用
- Java配置文件的使用
- windows 弹shell_Windows系统常用免费软件“红黑榜”
- JAVA移慎_java里面给对象赋值,慎用赋值符号(=) (转)
- 任意Android设备上运行测试
- Creating Your First Mac App--Implementing Action Methods 实现动作方法
- java maven web项目_java maven项目跟web项目区别
- 前端开发者必会的英语单词
- 先进驾驶员辅助系统ADSA
- ie6 html 模板,网页排版应该考虑IE6的兼容性问题_HTML/Xhtml_网页制作
- Python安装教程和Pycham教程
- 燕千云 YQCloud 数智化业务服务管理平台发布1.11版本
- C# 图片与byte[]转换
- Java 6-1 人口统计
- 【python--教程】python读写word文档
- 很久没来,丢一份前阵子做的 10 万连接性能测试 (fibjs, golang, nginx, nodejs)
热门文章
- ubuntu16.04 安装python3.6
- laravel5.5路由使用name的好处
- 删除指定类型的所有字段
- arm 基础:Nand Flash与Nor Flash的区别
- Linux字符设备驱动中container_of宏的作用
- android 发送显示广播,如何查看Android系统当前发送了什么广播
- LED显示驱动(五):视频设备显示驱动调试步骤总结
- 服务器BIOS、BMC、IPMI、EFI、UEFI等知识详解
- 管状合金电阻和片状合金电阻的区别_SAE 6118、高电阻合金际锻材
- qt中实现左右分割线_一种快速刷新richedit中内嵌动画的方法的实现