小程序中获取年月日时分的组件

在原生的小程序组件中是没有获取datetime类型的组件的,当你需要设置年月日时分的时候就需要自己定义组件了,

这里使用的uniapp来写的

首先定义wxml层:

html 复制代码
<view class="form-item">
  <text class="form-label required">线索发现时间</text>
  <picker
    class="form-picker"
    mode="multiSelector"
    :range="range"
    :value="pickerIdx"
    @change="onDateTimeChange"
    @columnchange="onColumnChange"
  >
    <view class="picker-value">
      {{ formData.findTime || '请选择线索发现时间' }}
    </view>
  </picker>
</view>

之后就是

JS代码

需要返回五个数据,但是因为日是动态的所以需要getDays()函数来自己获取。

定义数组,有五列,分别是年月日时分

主要就是监听着数组中的五列,数组中的每一列又会变化,每转动一次转盘,就会重新赋值给变量,

javascript 复制代码
export default {
  data() {
    /* 五列数据源 */
    const years   = Array.from({ length: 11 }, (_, i) => 2020 + i);
    const months  = Array.from({ length: 12 }, (_, i) => i + 1);
    const hours   = Array.from({ length: 24 }, (_, i) => i);
    const minutes = Array.from({ length: 60 }, (_, i) => i);

    return {
      years, months, hours, minutes,
      range: [],      // 五列
      pickerIdx: [0, 0, 0, 0, 0],
      /* 其余业务字段 */
      formData: {
        findTime: '',   // 最终字符串 2025-09-19 14:30
        location: '',
        contact: '',
        description: '',
        latitude: '',
        longitude: '',
        isAnonymous: 0,
        status: 2,
        images: []
      },
      /* 其余原 data ... */
    };
  },

  onLoad(options) {
    this.initRange();          // 关键:初始化 picker
    /* 其余 onLoad 逻辑 ... */
  },

  methods: {
    /* ---------- 日期时间选择 ---------- */
    getDays(y, m) {
      return new Date(y, m, 0).getDate();
    },
    initRange() {
      const now = new Date();
      const y = now.getFullYear();
      const m = now.getMonth() + 1;
      const d = now.getDate();
      const h = now.getHours();
      const mm = now.getMinutes();

      this.pickerIdx = [
        this.years.indexOf(y),
        m - 1,
        d - 1,
        h,
        mm
      ];
      const days = Array.from({ length: this.getDays(y, m) }, (_, i) => i + 1);
      this.range = [this.years, this.months, days, this.hours, this.minutes];
    },
    onColumnChange(e) {
      const col = e.detail.column;
      const row = e.detail.value;
      const idx = [...this.pickerIdx];
      idx[col] = row;

      if (col === 0 || col === 1) { // 年或月变化
        const year = this.years[idx[0]];
        const month = this.months[idx[1]];
        const days = Array.from({ length: this.getDays(year, month) }, (_, i) => i + 1);
        this.range[2] = days;
        if (idx[2] >= days.length) idx[2] = days.length - 1;
        this.pickerIdx = idx;
      }
    },
    onDateTimeChange(e) {
      const idx = e.detail.value;
      const y = this.years[idx[0]];
      const m = String(this.months[idx[1]]).padStart(2, '0');
      const d = String(this.range[2][idx[2]]).padStart(2, '0');
      const h = String(this.hours[idx[3]]).padStart(2, '0');
      const mm = String(this.minutes[idx[4]]).padStart(2, '0');
      this.formData.findTime = `${y}-${m}-${d} ${h}:${mm}`;
    },

  }
};
相关推荐
java_logo1 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
咩咩啃树皮8 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白10 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司11 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415912 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风14 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z1234567898615 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112315 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python