按周切换的时间选择器

本文介绍了一种按周切换的时间选择器实现方法,通过JavaScript操作日期对象,实现了获取当前周、上一周及下一周的功能,适用于日历、时间范围筛选等场景。

今天遇到一个要按周切换的时间选择器,简单的做一下记录

onShow: function () {
      let curD = new Date();
      let firstD = new Date();
      let lastD = new Date();
      this.setData({
            curD: curD,
            firstD: firstD,
            lastD: lastD
      })
      this.getTime()
},

getTime() {  //获取当前周
      let curD = this.data.curD
      let firstD = this.data.firstD
      let lastD = this.data.lastD
      let intD = new Date();
      let dayTime = 24 * 60 * 60 * 1000;
      var dateLong = curD.getTime();
      if (curD.getDay() == 0) { //当前时间取代过去的时间
            dateLong = dateLong - (6 * dayTime);
      } else {
            dateLong = dateLong - (curD.getDay() - 1) * dayTime;
      }
      let d = curD.setTime(dateLong);
      let tt = Date.parse(firstD)
      firstD = curD;
      lastD.setTime(firstD.getTime() + 6 * dayTime);
      let st = firstD.getFullYear() + '-' + (firstD.getMonth() + 1) + '-' + firstD.getDate();
      if (tt > Date.parse(st)){
            st = intD.getFullYear() + '-' + (intD.getMonth() + 1) + '-' + intD.getDate();
      }
      let ss = st + ' 至 ' + lastD.getFullYear() + '-' + (lastD.getMonth() + 1) + '-' + lastD.getDate();
      
      this.setData({
            ss: ss
      })
},

backDate() {  //上一周
      let curD = this.data.curD
      let dayTime = 24 * 60 * 60 * 1000;
      var dateLong = curD.getTime();
      curD.setTime(dateLong - (6 * dayTime));
      this.setData({
            curD: curD
      })
     this. getTime();
},
nextDate() {  //下一周
      let curD = this.data.curD
      let dayTime = 24 * 60 * 60 * 1000;
      var dateLong = curD.getTime();
      curD.setTime(dateLong + (7 * dayTime));
      this.setData({
            curD: curD
      })
      this.getTime();
},
### UniApp 中实现时间选择的方法 在 UniApp 开发过程中,如果需要实现一个 **时间选择** 的功能,可以通过扩展现有的 `picker` 组件来完成。以下是两种可能的解决方案: #### 方法一:基于原生组件改造 可以参考已有日期选择的逻辑,通过修改其显示的内容以及返回的数据结构,从而实现时间的选择。 以下是一个简单的代码示例,展示如何创建一个自定义的时间选择[^2]: ```html <template> <view> <uni-forms-item label="次:" required> <picker mode="selector" :range="weeksRange" @change="onWeekChange"> <input class="pickerclass" v-model="selectedWeek" placeholder="请选择次" /> </picker> </uni-forms-item> </view> </template> <script> export default { data() { return { weeksRange: [], // 存储可选的列表 selectedWeek: '', // 当前选中的 }; }, created() { this.generateWeeks(); // 初始化数据 }, methods: { generateWeeks() { const currentDate = new Date(); const startYear = currentDate.getFullYear(); let weekIndex = 1; // 构造当前年的所有数 while (weekIndex <= 53) { // 假设一年最多有53 this.weeksRange.push(`${startYear} 年 第 ${weekIndex} `); weekIndex++; } }, onWeekChange(e) { this.selectedWeek = e.detail.value; // 更新选中的 } } }; </script> ``` 上述代码实现了如下功能: - 使用 `picker` 的 `mode=selector` 属性来自定义选项。 - 动态生成了一年内所有的次作为可选项。 --- #### 方法二:引入第三方插件 对于更复杂的需求(如支持国际化、多种样式等),可以选择一些成熟的插件或库。目前社区中有部分开发者已经封装好了类似的工具,可以直接集成到项目中使用。 例如,可以尝试搜索并安装类似于 `uView` 或其他 UI 库提供的增强型选择组件。这些组件通常会提供更加灵活的配置项和更好的用户体验[^1]。 假设我们采用 uView 提供的日历/日期选择,则可通过调整参数快速切换至“按”模式。具体操作方式需查阅对应文档说明。 --- ### 注意事项 无论是自行开发还是借助外部资源,在实际应用时都需要注意以下几点: 1. 数据格式的一致性处理; 2. 对不同平台间差异性的适配测试; 3. 用户交互体验优化,比如默认值设置、错误提示等功能补充。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值