From c0812efddacf0c121fe6752afa47afbcef5d44a7 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 5 Apr 2023 01:48:11 +0800 Subject: [PATCH] =?UTF-8?q?refector:=20=E6=9B=B4=E6=96=B0=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- store/index.js | 3 +- uni_modules/uni-datetime-picker/changelog.md | 98 ++- .../uni-datetime-picker/calendar-item.vue | 24 +- .../uni-datetime-picker/calendar.vue | 271 +++---- .../uni-datetime-picker/i18n/en.json | 2 +- .../uni-datetime-picker/time-picker.vue | 59 +- .../uni-datetime-picker.vue | 686 +++++++++--------- .../components/uni-datetime-picker/util.js | 389 +++++----- uni_modules/uni-datetime-picker/package.json | 11 +- utils/common.js | 4 +- utils/dateTimePicker.js | 1 + utils/getTime.js | 10 + 12 files changed, 817 insertions(+), 741 deletions(-) create mode 100644 utils/getTime.js diff --git a/store/index.js b/store/index.js index d1b820a..3114b97 100644 --- a/store/index.js +++ b/store/index.js @@ -41,7 +41,8 @@ const store = new Vuex.Store({ vuex_login: 'http://qyjy.ctc-zc.com/h5/', vuex_version: '1.00.08', vuex_host: 'http://222.222.144.147:6013', - vuex_api: 'http://222.222.144.147:6013/api', + // vuex_api: 'http://222.222.144.147:6013/api', + vuex_api: 'http://49.232.14.174:2226/api', vuex_apifile: 'http://222.222.144.147:6013/api/file/', // vuex_api: 'http://127.0.0.1:8000/api', // vuex_host: 'http://10.99.5.79:20309', diff --git a/uni_modules/uni-datetime-picker/changelog.md b/uni_modules/uni-datetime-picker/changelog.md index 5c9735a..1f1a554 100644 --- a/uni_modules/uni-datetime-picker/changelog.md +++ b/uni_modules/uni-datetime-picker/changelog.md @@ -1,31 +1,71 @@ +## 2.2.22(2023-03-30) +- 修复 日历 picker 修改年月后,自动选中当月1日 [详情](https://ask.dcloud.net.cn/question/165937) +- 修复 小程序端 低版本 ios NaN [详情](https://ask.dcloud.net.cn/question/162979) +## 2.2.21(2023-02-20) +- 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362) +## 2.2.20(2023-02-17) +- 优化 值为空依然选中当天问题 +- 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间 +- 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间 +- 优化 字节小程序日期时间范围选择,底部日期换行问题 +## 2.2.19(2023-02-09) +- 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686) +## 2.2.18(2023-02-08) +- 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684) +- 优化 PC端输入日期格式错误时返回当前日期时间 +- 优化 PC端输入日期时间超出 start、end 限制的Bug +- 优化 移动端日期时间范围用法时间展示不完整问题 +## 2.2.17(2023-02-04) +- 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679) +- 修复 vue3 time-picker 无法显示绑定时分秒的Bug +## 2.2.16(2023-02-02) +- 修复 字节小程序报错的Bug +## 2.2.15(2023-02-02) +- 修复 某些情况切换月份错误的Bug +## 2.2.14(2023-01-30) +- 修复 某些情况切换月份错误的Bug [详情](https://ask.dcloud.net.cn/question/162033) +## 2.2.13(2023-01-10) +- 修复 多次加载组件造成内存占用的Bug +## 2.2.12(2022-12-01) +- 修复 vue3 下 i18n 国际化初始值不正确的Bug +## 2.2.11(2022-09-19) +- 修复 支付宝小程序样式错乱的Bug [详情](https://github.com/dcloudio/uni-app/issues/3861) +## 2.2.10(2022-09-19) +- 修复 反向选择日期范围,日期显示异常的Bug [详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false) +## 2.2.9(2022-09-16) +- 可以使用 uni-scss 控制主题色 +## 2.2.8(2022-09-08) +- 修复 close事件无效的Bug +## 2.2.7(2022-09-05) +- 修复 移动端 maskClick 无效的Bug [详情](https://ask.dcloud.net.cn/question/140824) ## 2.2.6(2022-06-30) - 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 ## 2.2.5(2022-06-24) -- 修复 日历顶部年月及底部确认未国际化 bug +- 修复 日历顶部年月及底部确认未国际化的Bug ## 2.2.4(2022-03-31) -- 修复 Vue3 下动态赋值,单选类型未响应的 bug +- 修复 Vue3 下动态赋值,单选类型未响应的Bug ## 2.2.3(2022-03-28) -- 修复 Vue3 下动态赋值未响应的 bug +- 修复 Vue3 下动态赋值未响应的Bug ## 2.2.2(2021-12-10) -- 修复 clear-icon 属性在小程序平台不生效的 bug +- 修复 clear-icon 属性在小程序平台不生效的Bug ## 2.2.1(2021-12-10) -- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug +- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的Bug ## 2.2.0(2021-11-19) -- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) -- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) -## 2.1.5(2021-11-09) +- 优化 组件UI,并提供设计资源 [详情](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移 [https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5(2021-11-09) - 新增 提供组件设计资源,组件样式调整 ## 2.1.4(2021-09-10) -- 修复 hide-second 在移动端的 bug -- 修复 单选赋默认值时,赋值日期未高亮的 bug -- 修复 赋默认值时,移动端未正确显示时间的 bug +- 修复 hide-second 在移动端的Bug +- 修复 单选赋默认值时,赋值日期未高亮的Bug +- 修复 赋默认值时,移动端未正确显示时间的Bug ## 2.1.3(2021-09-09) - 新增 hide-second 属性,支持只使用时分,隐藏秒 ## 2.1.2(2021-09-03) - 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 - 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 - 优化 调整字号大小,美化日历界面 -- 修复 因国际化导致的 placeholder 失效的 bug +- 修复 因国际化导致的 placeholder 失效的Bug ## 2.1.1(2021-08-24) - 新增 支持国际化 - 优化 范围选择器在 pc 端过宽的问题 @@ -33,50 +73,50 @@ - 新增 适配 vue3 ## 2.0.19(2021-08-09) - 新增 支持作为 uni-forms 子组件相关功能 -- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的Bug ## 2.0.18(2021-08-05) -- 修复 type 属性动态赋值无效的 bug +- 修复 type 属性动态赋值无效的Bug - 修复 ‘确认’按钮被 tabbar 遮盖 bug -- 修复 组件未赋值时范围选左、右日历相同的 bug +- 修复 组件未赋值时范围选左、右日历相同的Bug ## 2.0.17(2021-08-04) -- 修复 范围选未正确显示当前值的 bug -- 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +- 修复 范围选未正确显示当前值的Bug +- 修复 h5 平台(移动端)报错 'cale' of undefined 的Bug ## 2.0.16(2021-07-21) - 新增 return-type 属性支持返回 date 日期对象 ## 2.0.15(2021-07-14) -- 修复 单选日期类型,初始赋值后不在当前日历的 bug +- 修复 单选日期类型,初始赋值后不在当前日历的Bug - 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) - 优化 移动端移除显示框的清空按钮,无实际用途 ## 2.0.14(2021-07-14) -- 修复 组件赋值为空,界面未更新的 bug -- 修复 start 和 end 不能动态赋值的 bug -- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug +- 修复 组件赋值为空,界面未更新的Bug +- 修复 start 和 end 不能动态赋值的Bug +- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的Bug ## 2.0.13(2021-07-08) -- 修复 范围选择不能动态赋值的 bug +- 修复 范围选择不能动态赋值的Bug ## 2.0.12(2021-07-08) - 修复 范围选择的初始时间在一个月内时,造成无法选择的bug ## 2.0.11(2021-07-08) - 优化 弹出层在超出视窗边缘定位不准确的问题 ## 2.0.10(2021-07-08) -- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug +- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的Bug - 优化 弹出层在超出视窗边缘被遮盖的问题 ## 2.0.9(2021-07-07) - 新增 maskClick 事件 -- 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px +- 修复 特殊情况日历 rpx 布局错误的Bug,rpx -> px - 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] ## 2.0.8(2021-07-07) - 新增 日期时间显示框支持插槽 ## 2.0.7(2021-07-01) - 优化 添加 uni-icons 依赖 ## 2.0.6(2021-05-22) -- 修复 图标在小程序上不显示的 bug +- 修复 图标在小程序上不显示的Bug - 优化 重命名引用组件,避免潜在组件命名冲突 ## 2.0.5(2021-05-20) - 优化 代码目录扁平化 ## 2.0.4(2021-05-12) - 新增 组件示例地址 ## 2.0.3(2021-05-10) -- 修复 ios 下不识别 '-' 日期格式的 bug +- 修复 ios 下不识别 '-' 日期格式的Bug - 优化 pc 下弹出层添加边框和阴影 ## 2.0.2(2021-05-08) - 修复 在 admin 中获取弹出层定位错误的bug @@ -87,7 +127,7 @@ > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker) ## 1.0.6(2021-03-18) - 新增 hide-second 属性,时间支持仅选择时、分 -- 修复 选择跟显示的日期不一样的 bug -- 修复 chang事件触发2次的 bug -- 修复 分、秒 end 范围错误的 bug +- 修复 选择跟显示的日期不一样的Bug +- 修复 chang事件触发2次的Bug +- 修复 分、秒 end 范围错误的Bug - 优化 更好的 nvue 适配 diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue index 3d2dbea..dba9887 100644 --- a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -13,10 +13,10 @@ 'uni-calendar-item--after-checked':weeks.afterMultiple, 'uni-calendar-item--disable':weeks.disable, }"> - + {{weeks.date}} - + @@ -41,10 +41,6 @@ return [] } }, - lunar: { - type: Boolean, - default: false - }, checkHover: { type: Boolean, default: false @@ -62,6 +58,8 @@ diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js index efa5773..7dc34c4 100644 --- a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -1,27 +1,24 @@ class Calendar { constructor({ - date, selected, startDate, endDate, range, - // multipleStatus } = {}) { // 当前日期 - this.date = this.getDate(new Date()) // 当前初入日期 + this.date = this.getDateObj(new Date()) // 当前初入日期 // 打点信息 this.selected = selected || []; - // 范围开始 + // 起始时间 this.startDate = startDate - // 范围结束 + // 终止时间 this.endDate = endDate + // 是否范围选择 this.range = range // 多选状态 this.cleanMultipleStatus() // 每周日期 this.weeks = {} - // this._getWeek(this.date.fullDate) - // this.multipleStatus = multipleStatus this.lastHover = false } /** @@ -29,8 +26,8 @@ class Calendar { * @param {Object} date */ setDate(date) { - this.selectDate = this.getDate(date) - this._getWeek(this.selectDate.fullDate) + const selectDate = this.getDateObj(date) + this.getWeeks(selectDate.fullDate) } /** @@ -44,93 +41,82 @@ class Calendar { } } - /** - * 重置开始日期 - */ - resetSatrtDate(startDate) { - // 范围开始 + setStartDate(startDate) { this.startDate = startDate - } - /** - * 重置结束日期 - */ - resetEndDate(endDate) { - // 范围结束 + setEndDate(endDate) { this.endDate = endDate } + getPreMonthObj(date){ + date = fixIosDateFormat(date) + date = new Date(date) + + const oldMonth = date.getMonth() + date.setMonth(oldMonth - 1) + const newMonth = date.getMonth() + if(oldMonth !== 0 && newMonth - oldMonth === 0){ + date.setMonth(newMonth - 1) + } + return this.getDateObj(date) + } + getNextMonthObj(date){ + date = fixIosDateFormat(date) + date = new Date(date) + + const oldMonth = date.getMonth() + date.setMonth(oldMonth + 1) + const newMonth = date.getMonth() + if(newMonth - oldMonth > 1){ + date.setMonth(newMonth - 1) + } + return this.getDateObj(date) + } + /** - * 获取任意时间 + * 获取指定格式Date对象 */ - getDate(date, AddDayCount = 0, str = 'day') { - if (!date) { - date = new Date() - } - if (typeof date !== 'object') { - date = date.replace(/-/g, '/') - } - const dd = new Date(date) - switch (str) { - case 'day': - dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 - break - case 'month': - if (dd.getDate() === 31) { - dd.setDate(dd.getDate() + AddDayCount) - } else { - dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 - } - break - case 'year': - dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 - break - } - const y = dd.getFullYear() - const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 - const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + getDateObj(date) { + date = fixIosDateFormat(date) + date = new Date(date) + return { - fullDate: y + '-' + m + '-' + d, - year: y, - month: m, - date: d, - day: dd.getDay() + fullDate: getDate(date), + year: date.getFullYear(), + month: addZero(date.getMonth() + 1), + date: addZero(date.getDate()), + day: date.getDay() } } - /** - * 获取上月剩余天数 + * 获取上一个月日期集合 */ - _getLastMonthDays(firstDay, full) { - let dateArr = [] - for (let i = firstDay; i > 0; i--) { - const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() - dateArr.push({ - date: beforeDate, - month: full.month - 1, + getPreMonthDays(amount, dateObj) { + const result = [] + for (let i = amount - 1; i >= 0; i--) { + const month = dateObj.month - 1 + result.push({ + date: new Date(dateObj.year, month, -i).getDate(), + month, disable: true }) } - return dateArr + return result } /** - * 获取本月天数 + * 获取本月日期集合 */ - _currentMonthDys(dateData, full) { - let dateArr = [] - let fullDate = this.date.fullDate - for (let i = 1; i <= dateData; i++) { - let isinfo = false - let nowDate = full.year + '-' + (full.month < 10 ? - full.month : full.month) + '-' + (i < 10 ? - '0' + i : i) - // 是否今天 - let isDay = fullDate === nowDate + getCurrentMonthDays(amount, dateObj) { + const result = [] + const fullDate = this.date.fullDate + for (let i = 1; i <= amount; i++) { + const currentDate = `${dateObj.year}-${dateObj.month}-${addZero(i)}` + const isToday = fullDate === currentDate // 获取打点信息 - let info = this.selected && this.selected.find((item) => { - if (this.dateEqual(nowDate, item.date)) { + const info = this.selected && this.selected.find((item) => { + if (this.dateEqual(currentDate, item.date)) { return item } }) @@ -139,62 +125,52 @@ class Calendar { let disableBefore = true let disableAfter = true if (this.startDate) { - // let dateCompBefore = this.dateCompare(this.startDate, fullDate) - // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) - disableBefore = this.dateCompare(this.startDate, nowDate) + disableBefore = dateCompare(this.startDate, currentDate) } if (this.endDate) { - // let dateCompAfter = this.dateCompare(fullDate, this.endDate) - // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) - disableAfter = this.dateCompare(nowDate, this.endDate) - } - let multiples = this.multipleStatus.data - let checked = false - let multiplesStatus = -1 - if (this.range) { - if (multiples) { - multiplesStatus = multiples.findIndex((item) => { - return this.dateEqual(item, nowDate) - }) - } - if (multiplesStatus !== -1) { - checked = true - } - } - let data = { - fullDate: nowDate, - year: full.year, - date: i, - multiple: this.range ? checked : false, - beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after), - afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after), - month: full.month, - disable: !(disableBefore && disableAfter), - isDay, - userChecked: false - } - if (info) { - data.extraInfo = info + disableAfter = dateCompare(currentDate, this.endDate) } - dateArr.push(data) + let multiples = this.multipleStatus.data + let multiplesStatus = -1 + if (this.range && multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, currentDate) + }) + } + const checked = multiplesStatus !== -1 + + result.push({ + fullDate: currentDate, + year: dateObj.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(currentDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(currentDate, this.multipleStatus.before, this.multipleStatus.after), + month: dateObj.month, + disable: (this.startDate && !dateCompare(this.startDate, currentDate)) || (this.endDate && !dateCompare(currentDate,this.endDate)), + isToday, + userChecked: false, + extraInfo: info + }) } - return dateArr + return result } /** - * 获取下月天数 + * 获取下一个月日期集合 */ - _getNextMonthDays(surplus, full) { - let dateArr = [] - for (let i = 1; i < surplus + 1; i++) { - dateArr.push({ + _getNextMonthDays(amount, dateObj) { + const result = [] + const month = dateObj.month + 1 + for (let i = 1; i <= amount; i++) { + result.push({ date: i, - month: Number(full.month) + 1, + month, disable: true }) } - return dateArr + return result } /** @@ -205,58 +181,37 @@ class Calendar { if (!date) { date = new Date() } - const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) - return dateInfo - } - /** - * 比较时间大小 - */ - dateCompare(startDate, endDate) { - // 计算截止时间 - startDate = new Date(startDate.replace('-', '/').replace('-', '/')) - // 计算详细项的截止时间 - endDate = new Date(endDate.replace('-', '/').replace('-', '/')) - if (startDate <= endDate) { - return true - } else { - return false - } + return this.calendar.find(item => item.fullDate === this.getDateObj(date).fullDate) } /** * 比较时间是否相等 */ dateEqual(before, after) { - // 计算截止时间 - before = new Date(before.replace('-', '/').replace('-', '/')) - // 计算详细项的截止时间 - after = new Date(after.replace('-', '/').replace('-', '/')) - if (before.getTime() - after.getTime() === 0) { - return true - } else { - return false - } + before = new Date(fixIosDateFormat(before)) + after = new Date(fixIosDateFormat(after)) + return before.valueOf() === after.valueOf() } /** * 比较真实起始日期 */ - isLogicBefore(currentDay, before, after) { + isLogicBefore(currentDate, before, after) { let logicBefore = before if (before && after) { - logicBefore = this.dateCompare(before, after) ? before : after + logicBefore = dateCompare(before, after) ? before : after } - return this.dateEqual(logicBefore, currentDay) + return this.dateEqual(logicBefore, currentDate) } - isLogicAfter(currentDay, before, after) { + isLogicAfter(currentDate, before, after) { let logicAfter = after if (before && after) { - logicAfter = this.dateCompare(before, after) ? after : before + logicAfter = dateCompare(before, after) ? after : before } - return this.dateEqual(logicAfter, currentDay) + return this.dateEqual(logicAfter, currentDate) } /** @@ -276,7 +231,7 @@ class Calendar { var unixDe = de.getTime() - 24 * 60 * 60 * 1000 for (var k = unixDb; k <= unixDe;) { k = k + 24 * 60 * 60 * 1000 - arr.push(this.getDate(new Date(parseInt(k))).fullDate) + arr.push(this.getDateObj(new Date(parseInt(k))).fullDate) } return arr } @@ -285,11 +240,12 @@ class Calendar { * 获取多选状态 */ setMultiple(fullDate) { + if (!this.range) return + let { before, after } = this.multipleStatus - if (!this.range) return if (before && after) { if (!this.lastHover) { this.lastHover = true @@ -306,7 +262,7 @@ class Calendar { this.lastHover = false } else { this.multipleStatus.after = fullDate - if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus .after); } else { @@ -316,32 +272,28 @@ class Calendar { this.lastHover = true } } - this._getWeek(fullDate) + this.getWeeks(fullDate) } /** * 鼠标 hover 更新多选状态 */ setHoverMultiple(fullDate) { - let { - before, - after - } = this.multipleStatus + if (!this.range || this.lastHover) return - if (!this.range) return - if (this.lastHover) return + const { before } = this.multipleStatus if (!before) { this.multipleStatus.before = fullDate } else { this.multipleStatus.after = fullDate - if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); } else { this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); } } - this._getWeek(fullDate) + this.getWeeks(fullDate) } /** @@ -351,12 +303,12 @@ class Calendar { this.multipleStatus.before = before this.multipleStatus.after = after if (before && after) { - if (this.dateCompare(before, after)) { + if (dateCompare(before, after)) { this.multipleStatus.data = this.geDateAll(before, after); - this._getWeek(after) + this.getWeeks(after) } else { this.multipleStatus.data = this.geDateAll(after, before); - this._getWeek(before) + this.getWeeks(before) } } } @@ -365,46 +317,87 @@ class Calendar { * 获取每周数据 * @param {Object} dateData */ - _getWeek(dateData) { + getWeeks(dateData) { const { - fullDate, year, month, - date, - day - } = this.getDate(dateData) - let firstDay = new Date(year, month - 1, 1).getDay() - let currentDay = new Date(year, month, 0).getDate() - let dates = { - lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 - currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 - nextMonthDays: [], // 下个月开始几天 - weeks: [] + } = this.getDateObj(dateData) + + const preMonthDayAmount = new Date(year, month - 1, 1).getDay() + const preMonthDays = this.getPreMonthDays(preMonthDayAmount, this.getDateObj(dateData)) + + const currentMonthDayAmount = new Date(year, month, 0).getDate() + const currentMonthDays = this.getCurrentMonthDays(currentMonthDayAmount, this.getDateObj(dateData)) + + const nextMonthDayAmount = 42 - preMonthDayAmount - currentMonthDayAmount + const nextMonthDays = this._getNextMonthDays(nextMonthDayAmount, this.getDateObj(dateData)) + + const calendarDays = [...preMonthDays, ...currentMonthDays, ...nextMonthDays] + + const weeks = new Array(6) + for (let i = 0; i < calendarDays.length; i++) { + const index = Math.floor(i / 7) + if(!weeks[index]){ + weeks[index] = new Array(7) + } + weeks[index][i % 7] = calendarDays[i] } - let canlender = [] - const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) - dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) - canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) - let weeks = {} - // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 - for (let i = 0; i < canlender.length; i++) { - if (i % 7 === 0) { - weeks[parseInt(i / 7)] = new Array(7) - } - weeks[parseInt(i / 7)][i % 7] = canlender[i] - } - this.canlender = canlender + + this.calendar = calendarDays this.weeks = weeks } - - //静态方法 - // static init(date) { - // if (!this.instance) { - // this.instance = new Calendar(date); - // } - // return this.instance; - // } } +function getDateTime(date, hideSecond){ + return `${getDate(date)} ${getTime(date, hideSecond)}` +} -export default Calendar +function getDate(date) { + date = fixIosDateFormat(date) + date = new Date(date) + const year = date.getFullYear() + const month = date.getMonth()+1 + const day = date.getDate() + return `${year}-${addZero(month)}-${addZero(day)}` +} + +function getTime(date, hideSecond){ + date = fixIosDateFormat(date) + date = new Date(date) + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + return hideSecond ? `${addZero(hour)}:${addZero(minute)}` : `${addZero(hour)}:${addZero(minute)}:${addZero(second)}` +} + +function addZero(num) { + if(num < 10){ + num = `0${num}` + } + return num +} + +function getDefaultSecond(hideSecond) { + return hideSecond ? '00:00' : '00:00:00' +} + +function dateCompare(startDate, endDate) { + startDate = new Date(fixIosDateFormat(startDate)) + endDate = new Date(fixIosDateFormat(endDate)) + return startDate <= endDate +} + +function checkDate(date){ + const dateReg = /((19|20)\d{2})(-|\/)\d{1,2}(-|\/)\d{1,2}/g + return date.match(dateReg) +} + +const dateTimeReg = /^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])( [0-5][0-9]:[0-5][0-9]:[0-5][0-9])?$/ +function fixIosDateFormat(value) { + if (typeof value === 'string' && dateTimeReg.test(value)) { + value = value.replace(/-/g, '/') + } + return value +} + +export {Calendar, getDateTime, getDate, getTime, addZero, getDefaultSecond, dateCompare, checkDate, fixIosDateFormat} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/package.json b/uni_modules/uni-datetime-picker/package.json index 60fa1d0..8abed63 100644 --- a/uni_modules/uni-datetime-picker/package.json +++ b/uni_modules/uni-datetime-picker/package.json @@ -1,7 +1,7 @@ { "id": "uni-datetime-picker", "displayName": "uni-datetime-picker 日期选择器", - "version": "2.2.6", + "version": "2.2.22", "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择", "keywords": [ "uni-datetime-picker", @@ -17,11 +17,7 @@ "directories": { "example": "../../temps/example_temps" }, - "dcloudext": { - "category": [ - "前端组件", - "通用组件" - ], +"dcloudext": { "sale": { "regular": { "price": "0.00" @@ -38,7 +34,8 @@ "data": "无", "permissions": "无" }, - "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" }, "uni_modules": { "dependencies": [ diff --git a/utils/common.js b/utils/common.js index e79f64c..37902fe 100644 --- a/utils/common.js +++ b/utils/common.js @@ -23,10 +23,10 @@ function resetData(params) { } return arr; } - -export default resetData; +export default resetData; + \ No newline at end of file diff --git a/utils/dateTimePicker.js b/utils/dateTimePicker.js index 089e3ca..6eb5180 100644 --- a/utils/dateTimePicker.js +++ b/utils/dateTimePicker.js @@ -83,5 +83,6 @@ function dateTimePicker(startYear,endYear,date) { } module.exports = { dateTimePicker: dateTimePicker, + getNewDateArry: getNewDateArry, getMonthDay: getMonthDay } \ No newline at end of file diff --git a/utils/getTime.js b/utils/getTime.js new file mode 100644 index 0000000..03068e6 --- /dev/null +++ b/utils/getTime.js @@ -0,0 +1,10 @@ +import {getNewDateArry} from './dateTimePicker.js' +function getStartAndEnd() { + const date_l = getNewDateArry() + const NowTime = new Date().getTime() + // 今日结束时间戳 + const todayEndTime = new Date(new Date().setHours(23,59,59,999)).getTime() + return [`${date_l[0]}-${date_l[1]}-${date_l[2]} ${date_l[3]}:${date_l[4]}:00`, `${date_l[0]}-${date_l[1]}-${date_l[2]} 23:59:59`] +} + +export default getStartAndEnd; \ No newline at end of file