微信小程序 工作时间段选择 星期几选择

本文介绍如何在微信小程序中实现工作时间段选择和星期几选择功能。使用picker和input组件完成时间段选择,利用checkbox和label实现多选的工作日选择。通过处理selectedList来动态设置星期的选中状态。
部署运行你感兴趣的模型镜像

1. 效果图如上  需完成时间段的选择  以及下面的工作日选择  保存按钮为formSubmit提交后台

2.思路: ①时段用picker跟input  如果没有占位字符  则不需要input

             ②工作日选择用checkbox  多选的样式用label  将checkbox隐藏

             ③label的选择后的样式跟取消的样式,这里无需判断checked  当然也可以判断checked  我这里的方法是,先建一个放星期一到星期天的数组date,选择之后,在js里返回的detail.value里找到所选择的日期selectedList,再判断date是否在selectedList内存在(注意是date在list中是否存在)。如果存在则设对应的布尔为true,否则false。

下面为代码:

wxml

<!--pages/addtime/index.wxml-->
<view class='main'>
  <view class='when'>
    <form bindsubmit='formSubmit'>
 	  <button formType='submit' id='save'>保存</button>
      <!-- 选择时间段 -->
    	<view class="selectTime">
	        <text>时段:</text>
	        <view class="section">
	          <picker mode="time" value="{{time}}" start="09:00" end="21:00" bindchange="bindTimeChange" id='startTime'>
            <!-- 在js中判断所选picker的id为startTime时,将value赋值给startTime,放在input内 -->
	            <view class="picker">
	                <input placeholder='开始时间' value='{{startTime}}' name="startTime"></input>
	            </view>
	          </picker>
	        </view>
	        <text>至</text>
	     	<view class="section">
	          <picker mode="time" value="{{time}}" start="09:00" end="21:00" bindchange="bindTimeChange" id='endTime'>
            <!-- 在js中判断所选picker的id为endTime时,将value赋值给endTime,放在input内 -->
            
	            <view class="picker">
	                <input placeholder='结束时间' value='{{endTime}}' name="endTime"></input>
	            </view>
	          </picker>
	        </view>
	    </view>

      <!-- 选择星期 -->
      <view class='selectDay'>
        <checkbox-group bindchange="checkboxChange" name="checkbox">
        	  重复:
            <!--写一个class选择后的背景色,在js中处理对应布尔值,在class中用三元式判断布尔并加背景色  -->
	          <label class="checkbox {{selected.monday?'selectedColor':''}}" for='monday'>
	          一
	            <checkbox value="monday" id='monday' hidden/>
	          </label>

	          <label class="checkbox {{selected.tuesday?'selectedColor':''}}" for='tuesday'>
	          二
	            <checkbox value="tuesday" id='tuesday' hidden/>
	          </label>

	          <label class="checkbox {{selected.wednesday?'selectedColor':''}}" for='wednesday'>
	          三
	            <checkbox value="wednesday" id='wednesday' hidden/>
	          </label>

	          <label class="checkbox {{selected.thursday?'selectedColor':''}}" for='thursday'>
	          四
	            <checkbox value="thursday" id='thursday' hidden/>
	          </label>

	          <label class="checkbox {{selected.friday?'selectedColor':''}}" for='friday'>
	          五
	            <checkbox value="friday" id='friday' hidden/>
	          </label>

	          <label class="checkbox {{selected.saturday?'selectedColor':''}}" for='saturday'>
	         六
	            <checkbox value="saturday" id='saturday' hidden/>
	          </label>

	          <label class="checkbox {{selected.sunday?'selectedColor':''}}" for='sunday'>
	         七
	            <checkbox value="sunday" id='sunday' hidden/>
	          </label>

        </checkbox-group>
      </view>
    </form>
  </view>
</view>

wx js

// pages/mine/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    startTime:null,
    endTime: null,
    selected: {"monday":false,"tuesday":false,"friday":false,"wednesday":false,"thursday":false,"sunday":false,"saturday":false},
  // selected内放对应的用来判断class的布尔json
  },
  bindTimeChange: function(e){
    if (e.currentTarget.id=="startTime") {
      this.setData({startTime:e.detail.value});
    }else if (e.currentTarget.id=="endTime") {
      this.setData({endTime:e.detail.value});
    }
  },
  checkboxChange: function(e){
    var selectedList = e.detail.value;
    var date = ["monday","tuesday","friday","wednesday","thursday","sunday","saturday"];//包含所有日期的数组
    var selected = this.data.selected;//先获取data中的值,好用来赋值
    for (var i = 0; i < date.length; i++) {
      if (selectedList.indexOf(date[i])!=-1) { //判断所有的日期date在所选择的列表中是否存在,存在则给class
        selected[date[i]] = true;
      }else{
        selected[date[i]] = false;
      }
    }
      this.setData({selected:selected});
  },
  formSubmit:function(e){
    //提交后台
    console.log(e);
  },



您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户在微信小程序中实现一个日期选择器并显示选中日期的功能。首先,我得回顾用户提供的参考引用,看看有没有相关的组件或者实现方法。 用户提到了引用[1]和引用[2],其中引用[1]是关于使用Taro和React实现日期和时间选择的组件,类似外卖提货的功能,左侧选日期,右侧选时间,并且有时间段限制。引用[2]是关于使用Vant Weapp的Cascader组件做省市区选择器的示例,里面提到了picker和van-field、van-popup等组件的用法。虽然引用[2]主要针对地区选择,但其中的van-field和van-popup的结构可能可以借鉴到日期选择器的实现中。 接下来,我需要确定用户的需求是使用原生微信小程序还是第三方组件库。用户的问题中没有明确说明,但参考引用中提到了Vant Weapp,所以可能用户对使用第三方组件持开放态度。不过,原生组件可能更稳定,兼容性更好,尤其是日期选择器,微信小程序本身有picker组件支持日期选择模式。 根据用户需求,需要实现一个日期选择器,用户选择后显示选中的日期。可能的步骤包括: 1. 使用微信小程序的picker组件,设置mode为date,这样可以调起日期选择器。 2. 在页面上显示选中的日期,可以通过data中的变量绑定到视图层。 3. 处理bindchange事件,当用户选择日期后更新data中的值,从而触发视图更新。 同时,用户可能需要自定义日期的显示格式,比如将日期转换为YYYY-MM-DD的形式,或者添加星期等信息。此外,限制可选日期范围也是常见的需求,比如只能选择未来n天的日期,或者排除某些特定日期。 参考引用[1]中的需求是选择未来n天内的某一天,并且有时间段限制。但用户当前的问题可能只需要日期选择,时间选择可能后续再考虑。不过示例代码可能需要处理最小和最大日期,这可以通过picker的start和end属性设置。 原生picker组件的使用方式如下: - 在wxml中添加<picker>组件,设置mode为date,并绑定bindchange事件。 - 在js中定义事件处理函数,通过event.detail.value获取选中的日期值,然后更新data中的变量。 - 在页面上使用{{selectedDate}}来显示选中的日期。 另外,用户可能需要将日期格式化,例如使用工具函数将字符串转换为更友好的格式,比如“2024年3月10日”或者“03/10/2024”。这可以通过在js中处理日期字符串来实现。 可能的示例代码结构如下: WXML部分: <picker mode="date" value="{{date}}" start="{{startDate}}" end="{{endDate}}" bindchange="onDateChange"> <view>选择日期:{{formattedDate}}</view> </picker> JS部分: Page({ data: { date: '', formattedDate: '请选择日期', startDate: '2024-01-01', endDate: '2025-12-31' }, onDateChange(e) { const value = e.detail.value; // 格式化日期 const date = new Date(value); const formatted = `${date.getFullYear()}年${date.getMonth()+1}月${date.getDate()}日`; this.setData({ date: value, formattedDate: formatted }); } }) 这样,用户选择日期后,页面上会显示格式化后的日期。start和end属性限制了可选日期范围,可以根据需求调整,比如start设为当前日期,end设为未来n天。 不过,可能需要处理默认值的问题,比如初始时date为空,这时候可能需要设置一个默认值,或者在onLoad生命周期函数中初始化日期。 另外,如果用户希望使用第三方组件库如Vant Weapp中的日期选择器,可能需要查阅Vant的文档,看看是否有更丰富的功能,比如弹出层式的选择器,或者更灵活的样式定制。但原生picker组件已经能满足基本需求,且实现简单,不需要引入额外的库。 综上,示例代码应该基于原生picker组件,展示如何选择日期并显示,同时处理日期格式化和可选范围限制。在回答中需要提供完整的WXML、JS、WXSS代码,并解释每个部分的作用,确保用户能够理解并实现。</think>以下是在微信小程序中实现日期选择并显示选中日期的示例代码: ### WXML部分 ```html <!-- 日期选择器 --> <picker mode="date" value="{{selectedDate}}" start="{{minDate}}" end="{{maxDate}}" fields="day" bindchange="onDateChange" > <view class="picker">选择日期:{{formattedDate}}</view> </picker> <!-- 显示选中日期 --> <view wx:if="{{selectedDate}}" class="result">已选日期:{{formattedDate}}</view> ``` ### JS部分 ```javascript Page({ data: { selectedDate: '', // 存储原始日期值 formattedDate: '请选择',// 格式化后的显示值 minDate: '2023-01-01', // 可选最小日期 maxDate: '2025-12-31' // 可选最大日期 }, // 日期选择事件 onDateChange(e) { const rawDate = e.detail.value const dateObj = new Date(rawDate) const formatDate = `${dateObj.getFullYear()}年 ${(dateObj.getMonth() + 1).toString().padStart(2, '0')}月 ${dateObj.getDate().toString().padStart(2, '0')}日` this.setData({ selectedDate: rawDate, formattedDate: formatDate.replace(/\n\s+/g, '') // 去除换行和空格 }) } }) ``` ### WXSS部分 ```css .picker { padding: 20rpx; background: #f5f5f5; border-radius: 8rpx; margin: 30rpx; } .result { margin: 30rpx; font-size: 32rpx; color: #07c160; } ``` ### 功能说明 1. **日期范围限制**:通过`start`和`end`属性设置可选日期范围(示例设置为2023-2025年) 2. **日期格式化**:将原始日期格式转换为`YYYY年MM月DD日`格式 3. **样式优化**:添加了背景色、圆角等基础样式 4. **响应式更新**:使用`bindchange`事件实时更新选中日期 如果要实现类似外卖的时间段限制(如某些日期不可选),可以通过以下方式扩展: ```javascript // 在onDateChange中添加验证逻辑 const weekDay = dateObj.getDay() if (weekDay === 0) { // 禁止选择周日 wx.showToast({ title: '周日不可选', icon: 'none' }) return } ```
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值