https://github.com/samous0726/dynamic-antd-rangepicker
https://blog.csdn.net/qq_39186346/article/details/107687502
https://blog.csdn.net/weixin_44674459/article/details/106000338

网页保存图片
import domtoimage from ‘dom-to-image’

https://blog.csdn.net/liona_koukou/article/details/90445679
https://blog.csdn.net/liuliuliuliumin123/article/details/103044141
https://my.oschina.net/u/4333022/blog/3324077
https://blog.csdn.net/weixin_44371012/article/details/104295115
http://t.zoukankan.com/changyuqing-p-13748738.html

disabledHours

  1. function disabledHours() {
  2. const hours = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
  3. }

disabledMinutes

  1. function disabledMinutes() {
  2. }

RangeTime字符串日期报错

The value/defaultValue of RangePicker must be a moment object array after antd@2.0
解决:用 moment(‘string time’) 把字符串日期包裹起来,转成moment格式
moment日期报错.jpg
moment日期格式.jpg

RangeTime

  1. // 禁用的日期:今天之前的日期不能选择
  2. function disabledDate(current) {
  3. return current && current < moment().endOf('day');
  4. }
  5. // 禁用的日期:大于今天的不能选择
  6. function disabledDate(current) {
  7. return current && current > moment().endOf('day')
  8. }
  9. // 禁用的日期:只能选择一个月的日期
  10. function disabledDate(current) {
  11. // current && current < moment().subtract(30, 'days') 30天之前的日期不可选
  12. return current && current < moment().subtract(30, 'days') || current > moment().endOf('day')
  13. }
  14. function disabledRangeTime(_, type) {
  15. if (type === 'start') {
  16. return {
  17. disabledHours: () => range(0, 60).splice(4, 20),
  18. disabledMinutes: () => range(30, 60),
  19. disabledSeconds: () => [55, 56],
  20. };
  21. }
  22. return {
  23. disabledHours: () => range(0, 60).splice(20, 4),
  24. disabledMinutes: () => range(0, 31),
  25. disabledSeconds: () => [55, 56],
  26. };
  27. }
  28. <RangePicker disabledDate={disabledDate} />
  29. <RangePicker
  30. disabledDate={disabledDate}
  31. disabledTime={disabledRangeTime}
  32. showTime={{
  33. hideDisabledOptions: true,
  34. defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('11:59:59', 'HH:mm:ss')],
  35. }}
  36. format="YYYY-MM-DD HH:mm:ss"
  37. />

DatePicker

  1. // 禁用的时分秒
  2. function disabledTime() {
  3. const [hours, minus, second] = moment().format('HH-mm-ss').split('-')
  4. return {
  5. disabledHours: () => range(hours*1, 24), // 设置的时间都是禁用的
  6. disabledMinutes: () => range(minus*1, 60),
  7. disabledSeconds: () => range(second*1, 60),
  8. }
  9. }
  10. <DatePicker
  11. format="YYYY-MM-DD HH:mm:ss"
  12. disabledDate={disabledDate}
  13. disabledTime={disabledDateTime}
  14. showTime={{ defaultValue: moment('00:00:00', 'HH:mm:ss') }}
  15. />

3.x时间日期选择

3.x日期时间.png

日期禁用

  1. 资料 https://blog.csdn.net/nongweiyilady/java/article/details/79960028

禁用日期.png
日期区间.png

  1. moment() 回显时间
    1. 注意:这里不能返回moment(),否则默认值是当前日期
    2. 更不能写{},不是个日期格式的数据,虽然要求是object类型,但是数值无法被组件成功解析
      1. const date = (type == 'edit') ? moment(time, 'YYYY/MM/DD HH:mm') : null

时间只能选择 30天

  1. const [selectDate, setSelectDate] = useState(null)
  2. const onCalendarChange = (dates) => {
  3. if (!dates || !dates.length) return
  4. setSelectDate(dates[0])
  5. }
  6. const onEndChange = () => {
  7. setSelectDate(null)
  8. }
  9. const disabledTaskDate = (current) => {
  10. if (selectDate){
  11. const offsetV = 2592000000; // 30天转换成ms
  12. const selectV = selectDate.valueOf() // 选择的开始时间
  13. return current > moment(selectV+offsetV) ||
  14. current < moment(selectV-offsetV) ||
  15. current > moment().endOf('day')
  16. } else {
  17. return current && current > moment().endOf('day')
  18. }
  19. }
  20. // 点击日期面板 确定按钮
  21. function onOk (value) {
  22. const [r1, r2] = value
  23. const start = r1.valueOf()
  24. let end = r2.valueOf()
  25. if (end > moment().valueOf()) end = moment().valueOf()
  26. onChange({action: 'radio', value: [start, end], subKey: 'custom' })
  27. }
  28. const attr = {
  29. format: 'YYYY-MM-DD HH:mm:ss',
  30. disabledDate,
  31. disabledTime,
  32. // 默认选择时间为最近 8 天
  33. defaultValue: [moment().startOf('day').subtract(7, 'days'), moment().endOf('day')],
  34. // 面板的日期 近一月
  35. defaultPickerValue: [moment().subtract(1, 'month'), moment()],
  36. showTime: { defaultValue: moment().endOf('day'), format: 'HH:mm' },
  37. onPanelChange,
  38. onChange: onEndChange,
  39. onCalendarChange,
  40. onOk,
  41. }
  42. <RangePicker {...attr} />
  43. // const month = 2592000000 // 30天转换成ms
  44. const week = 10080000 // 七天天转换成ms
  45. 今天: [moment().startOf('day'), moment()],
  46. 本周: [moment().startOf('week'), moment()],
  47. 本月: [moment().startOf('month'), moment()],
  48. 近一周: [moment().subtract(1, 'week'), moment()],
  49. 近一月: [moment().subtract(1, 'month'), moment()],
  50. 近三月: [moment().subtract(3, 'month'), moment()]
  51. // 禁用的日期:不能选择大于今天;超出30天内也不能选择
  52. function disabledDate(current) {
  53. return current && current < moment().subtract(30, 'days') || current > moment().endOf('day')
  54. }
  55. // 默认选择时间为最近7天
  56. const defaultSelectDate = {
  57. startDate: moment().startOf('day').subtract(6, 'days'),
  58. endDate: moment().endOf('day')
  59. }
  60. 选择时间限制,今天往前的3个月,也就是最近三个月
  61. const limitSelectDate = {
  62. min: moment().startOf('day').subtract(3, 'months'),
  63. max: moment().endOf('day')
  64. }

4.x时间日期选择

日期时间选择.png

时间禁用

时间禁用.png

  1. // 禁用的时间
  2. function lockTime() {
  3. const [hours, minus, second] = moment().format('HH-mm-ss').split('-')
  4. return {
  5. disabledHours: () => range(hours*1 + 1, 24), // 设置的时间都是禁用的
  6. disabledMinutes: () => range(minus*1 + 1, 60),
  7. disabledSeconds: () => range(second*1 + 1, 60),
  8. }
  9. // 时间区间数组
  10. function range(start, end) {
  11. const result = [] // 如果 start是字符串会死循环
  12. // eslint-disable-next-line no-plusplus
  13. for (let i = start; i < end; i++) {
  14. result.push(i)
  15. }
  16. return result
  17. }
  18. }

月份禁用

月份选择.png

onPanelChange

  1. 必须用 onPanelChange触发面板的改变,open属性控制面板的关闭

日历.png