方便预览,添加样式
.demo pre { max-height:400px; overflow-y:auto; }
.demo div { text-align: center; border-bottom: 1px dotted #aaa; line-height: 30px; width: 420px;}
.demo b, .demo i { width: 60px; display: inline-block; }
.demo b, .demo i:hover { background-color: #ccc; cursor:pointer; }
/* 今天显示蓝色 */
.demo--today { background-color: #87aed0; }
/* 上个月 下个月 显示灰色 */
.demo--lastMonth, .demo--nextMonth { background-color: #eee; }
/* 选中日期 显示 红色 */
.demo--on { background-color: #ce7272; }
.demo-tool { position: relative; }
.demo-tool i { min-width: 100px; text-decoration: underline; }
.demo-tool-prev, .demo-tool-next { position: absolute; }
.demo-tool-prev:hover, .demo-tool-next:hover { cursor: pointer; color: purple; }
.demo-tool-prev { left:10px; }
.demo-tool-next { right:10px; }
dateLogic.today
dateLogic.date
dateLogic.startWeekDay
dateLogic.weekDayColumn
change({date: String})
import {Component} from 'react'
import DateLogic from 'date-logic'
import extend from 'extend'
import cls from 'classnames'
class Basic extends Component {
constructor(props){
super(props)
let self = this
this.state = {
date : '' ,
number: '',
monthData : []
}
}
componentWillMount(){
let self = this
self.dateL = new DateLogic({
date: '2018-05-10' ,
startWeekDay:'7',
onChange: function (data) {
// data format equal monthData() reutrn
self.setState({
date : data.date ,
monthData : extend(true,[],data.render)
})
}
})
}
render () {
let self = this
let columnTextMap = { '1' : 'Mon', '2' : 'Tue', '3' : 'Wed', '4' : 'Thu', '5' : 'Fri', '6' : 'Sat', '7' : 'Sun' }
let systemData = {
today : self.dateL.today,
date : self.dateL.date,
startWeekDay : self.dateL.startWeekDay,
weekDayColumn : self.dateL.weekDayColumn,
}
return (
<div className="basicDemo demo" >
<div></div>
<pre>
{JSON.stringify(systemData, null, 4)}
</pre>
self.state.monthData =
<pre>
{JSON.stringify(self.state.monthData, null, 4)}
</pre>
<div>
{
self.dateL.weekDayColumn.map(function(item,index){
return (
<b key={index} >{columnTextMap[item]}</b>
)
})
}
</div>
<div>
{
self.state.monthData.map(function(item,index){
return (
<i key={index}
className={cls({
'demo--lastMonth' : item.lastMonth ,
'demo--nextMonth' : item.nextMonth ,
'demo--today' : item.today ,
'demo--on' : item.date == self.state.date
})}
onClick={function(){
self.dateL.change({
date : item.date
})
}}
>{item.day}</i>
)
})
}
</div>
</div>
)
}
}
module.exports = Basic
changeDays(Number)
import DateLogic from 'date-logic';
import extend from 'extend';
import { Component } from 'react';
import cls from 'classnames';
class ChangeDays extends Component {
constructor(props) {
super(props)
let self = this
this.state = {
date : '' ,
number: 2 ,
monthData : []
}
}
componentWillMount(){
let self = this
self.dateL = new DateLogic({
date: '2018-05-18' ,
startWeekDay:'3',
onChange: function (data) {
// data format equal monthData() reutrn
self.setState({
date : data.date ,
monthData : extend(true,[],data.render)
})
}
})
}
render() {
var self = this
let columnTextMap = { '1' : 'Mon', '2' : 'Tue', '3' : 'Wed', '4' : 'Thu', '5' : 'Fri', '6' : 'Sat', '7' : 'Sun' }
return (
<div className="changeDaysDemo demo">
<div>
changeDays :
<input
value={self.state.number}
onChange={function(e){
// 简单限制只能输入数字
e.target.value = Number( e.target.value.replace(/[^\d]+/g,'').toString() )
self.setState({
number : e.target.value
})
}}
/>
天
<br/>
<button onClick={function(e){
if(!self.state.number){ return false }
self.dateL.changeDays(self.state.number)
self.setState({
date : self.dateL.date ,
})
}}
>{'+'+self.state.number+'天'}</button>
<button onClick={function(e){
if(!self.state.number){ return false }
self.dateL.changeDays( Number('-'+self.state.number) )
self.setState({
date : self.dateL.date ,
})
}}
>{'-'+self.state.number+'天'}</button>
</div>
<div>
<span className="changeDays-tool-text" >
{
self.dateL.toFormat({
in:'YYYY-MM-DD',
date:self.dateL.date,
output:'YYYY年MM月DD日'
})
}
</span>
</div>
<div>
{
self.dateL.weekDayColumn.map(function(item,index){
return (
<b key={index} >{columnTextMap[item]}</b>
)
})
}
</div>
<div>
{
self.state.monthData.map(function(item,index){
return (
<i key={index}
className={cls({
'demo--lastMonth' : item.lastMonth ,
'demo--nextMonth' : item.nextMonth ,
'demo--today' : item.today ,
'demo--on' : item.date == self.state.date
})}
>{item.day}</i>
)
})
}
</div>
</div>
)
}
}
module.exports = ChangeDays
lastMonth()
nextMonth()
lastYear()
nextYear()
import {Component} from 'react'
import DateLogic from 'date-logic'
import extend from 'extend'
import cls from 'classnames'
class MonthYear extends Component {
constructor(props) {
super(props)
this.state = {
monthData: []
}
}
componentWillMount(){
let self = this
self.list = new DateLogic({
date: '2017-09-16',
startWeekDay:'3',
onChange: function (data) {
// console.log('onChange : ',data)
self.setState({
monthData : extend(true,[],data.render)
})
}
})
}
render() {
var self = this
let columnTextMap = { '1' : 'Mon', '2' : 'Tue', '3' : 'Wed', '4' : 'Thu', '5' : 'Fri', '6' : 'Sat', '7' : 'Sun' }
return (
<div className="monthYearDemo demo">
<div className="demo-tool">
<i className="demo-tool-prev"
onClick={function(){
self.list.lastYear()
}}
>lastYear</i>
<i className="demo-tool-next"
onClick={function(){
self.list.nextYear()
}}
>nextYear</i>
<b className="demo-tool-text" >
{self.list.toFormat({
in:'YYYY-MM-DD',
date:self.list.date,
output:'YYYY年'
})}
</b>
</div>
<div className="demo-tool">
<i className="demo-tool-prev"
onClick={function(){
self.list.lastMonth()
}}
>lastMonth</i>
<i className="demo-tool-next"
onClick={function(){
self.list.nextMonth()
}}
>nextMonth</i>
<b className="demo-tool-text" >
{self.list.toFormat({
in:'YYYY-MM-DD',
date:self.list.date,
output:'MM月'
})}
</b>
</div>
<div>
{
self.list.weekDayColumn.map(function(item,index){
return (
<b key={index} >{columnTextMap[item]}</b>
)
})
}
</div>
<div>
{
self.state.monthData.map(function(item,index){
return (
<i key={index}
className={cls({
'demo--lastMonth' : item.lastMonth ,
'demo--nextMonth' : item.nextMonth ,
'demo--today' : item.today ,
})}
>{item.day}</i>
)
})
}
</div>
</div>
)
}
}
module.exports = MonthYear
toFormat({in:inFormatString, date:dateString, output:outputFormatString)
dateToStr(dateObject, formatString)
strToDate(dateString, formatString)
可打开控制台查看打印数据
import {Component} from 'react'
import DateLogic from 'date-logic'
import extend from 'extend'
import cls from 'classnames'
class Basic extends Component {
constructor(props){
super(props)
let self = this
this.state = {
date : '' ,
number: '',
monthData : []
}
}
componentWillMount(){
let self = this
self.dateL = new DateLogic({
format: 'YYYY年MM月DD日', // 默认输出日期格式
date: '2008年02月16日', // 保持与默认格式一致
})
}
render () {
let self = this
let systemData = {
today : self.dateL.today,
date : self.dateL.date,
}
let formatResult = self.dateL.toFormat({
in:'YYYY年MM月DD日',
date:'1999年02月16日',
output:'YYYY--公元年--MM--DD'
})
let dateToStr = self.dateL.dateToStr(new Date('1200-12-12') , 'YYYY+MM_DD')
let strToDate = self.dateL.strToDate( '1560/3/2' , 'YYYY/MM/DD' )
console.group('formatDemo')
console.log('formatResult',formatResult)
console.log('dateToStr',dateToStr)
console.log('strToDate',strToDate)
console.groupEnd()
return (
<div className="formatDemo demo" >
根据配置默认输出格式
<pre>
例: self.dateL = new DateLogic({`
format: 'YYYY年MM月DD日',
date: '2008年02月16日',
`})
</pre>
=>
<pre>
self.dateL.today : {self.dateL.today} <br/>
self.dateL.date : {self.dateL.date}
</pre>
<hr/>
<pre>
例: self.dateL.toFormat({`
in:'YYYY年MM月DD日',
date:'1999年02月16日',
output:'YYYY--公元年--MM--DD'
`})
</pre>
=>
<pre>{formatResult}</pre>
<hr/>
<pre>{`例: self.dateL.dateToStr(new Date('1200-12-12') , 'YYYY+MM_DD')`}</pre>
=>
<pre>{dateToStr}</pre>
<hr/>
<pre>{`例: String(self.dateL.strToDate( '1560/3/2' , 'YYYY/MM/DD' ))`}</pre>
=>
<pre>{String(strToDate)}</pre>
</div>
)
}
}
module.exports = Basic