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日期范围选择控件相关推荐

  1. Connectify是一款很实用的免费软件。能把计算机变成一个无线路由器

    Connectify是一款很实用的免费软件.能把计算机变成一个无线路由器.它能通过您计算机上的无线网卡发射一个无线AP,让有WiFi功能的设备(手机.笔记本)上网.3.0版以前仅支持32位Window ...

  2. 黑苹果找不到触控板_苹果高管告诉你为何要添加触控板功能

    鉴于美国持续不断的冠状病毒爆发,苹果未能在线下举办发布会,而且大多数媒体也都提前拿不到苹果的设备,所以"上手"就只能交给苹果的高管了. 苹果软件工程高管克雷格·费德里希就制作了一段 ...

  3. react 拖拽连接插件_一款精美的 react 后台管理系统

    众里寻他千百度,蓦然回首,那人却在,灯火阑珊处.这么好的react开源项目,值得珍藏了! 项目依赖模块 项目是用create-react-app创建的,依赖包如下: react(是一个用于构建用户界面 ...

  4. 3w最简单led灯电路图_一款简单实用的LED灯驱动电路

    LED照明集低功耗.长寿命等优点,正日益广受欢迎.随着价格的不断下降,LED已开始在家庭照明中得以应用.最近接触了几款市售的36头.60头LED灯,耗电仅3w左右,亮度相当于10w白炽灯,很省电. 可 ...

  5. qos 流控功能_怎么设置飞鱼星QoS流量控制中的传统流控

    飞鱼星Volans公司致力于提供智能易用的网络通讯产品与服务,其通过创新技术不断提升网络使用质量,那么你知道怎么设置飞鱼星QoS流量控制中的传统流控吗?下面是学习啦小编整理的一些关于怎么设置飞鱼星Qo ...

  6. java 有选择的查询_如何在Java中将准备好的语句用于选择查询?

    我已经使用预备语句尝试了几次,但是它返回SQL异常.这是我的代码: public ArrayList name(String mobile, String password) { ArrayList ...

  7. modbus 0x06 连续写_这篇很实用,看完学会MODBUS的应用及编程

    现为大家讲解一下MODBUS的应用,现在工业控制上位机和下位机通信大部分采用通信协议为MODBUS,可想而知机器与机器通信的重要性. 一.MODBUS系统框架图 二.MODBUS运用 MODBUS 通 ...

  8. 推荐五款很实用却比较冷门的电脑软件

    在我们日常使用电脑的过程中,常会有各种各样的需求,今天为大家推荐了五款小众但是非常实用的软件,希望会对你有所帮助. 1.GifCam GifCam是一款用户可自由视频录制和剪辑相结合的动画制作软件,此 ...

  9. 推荐几款很实用画图工具

    目录 一.ProcessOn 二.Excalidraw 三.draw.io 四.语雀 五.XMind 六.Carbon 七.Visio 一.ProcessOn ProcessOn 是一个在线协作绘图平 ...

最新文章

  1. vi profile
  2. Disucz!高级幻灯片制作
  3. 皮一皮:皇上,他在下毒!
  4. 使用Skywalking实现全链路监控
  5. 日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用
  6. Java配置文件的使用
  7. windows 弹shell_Windows系统常用免费软件“红黑榜”
  8. JAVA移慎_java里面给对象赋值,慎用赋值符号(=) (转)
  9. 任意Android设备上运行测试
  10. Creating Your First Mac App--Implementing Action Methods 实现动作方法
  11. java maven web项目_java maven项目跟web项目区别
  12. 前端开发者必会的英语单词
  13. 先进驾驶员辅助系统ADSA
  14. ie6 html 模板,网页排版应该考虑IE6的兼容性问题_HTML/Xhtml_网页制作
  15. Python安装教程和Pycham教程
  16. 燕千云 YQCloud 数智化业务服务管理平台发布1.11版本
  17. C# 图片与byte[]转换
  18. Java 6-1 人口统计
  19. 【python--教程】python读写word文档
  20. 很久没来,丢一份前阵子做的 10 万连接性能测试 (fibjs, golang, nginx, nodejs)

热门文章

  1. ubuntu16.04 安装python3.6
  2. laravel5.5路由使用name的好处
  3. 删除指定类型的所有字段
  4. arm 基础:Nand Flash与Nor Flash的区别
  5. Linux字符设备驱动中container_of宏的作用
  6. android 发送显示广播,如何查看Android系统当前发送了什么广播
  7. LED显示驱动(五):视频设备显示驱动调试步骤总结
  8. 服务器BIOS、BMC、IPMI、EFI、UEFI等知识详解
  9. 管状合金电阻和片状合金电阻的区别_SAE 6118、高电阻合金际锻材
  10. qt中实现左右分割线_一种快速刷新richedit中内嵌动画的方法的实现