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

在原生的小程序组件中是没有获取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}`;
    },

  }
};
相关推荐
半梦半醒*2 小时前
在Linux中部署tomcat
java·linux·运维·服务器·centos·tomcat
缘的猿2 小时前
Kubernetes 四层负载均衡:Service核心原理与实战指南
java·kubernetes·负载均衡
鼠鼠我捏,要死了捏2 小时前
Java Stream API性能优化实践指南
java·performance·stream api
王嘉俊9252 小时前
Java面试宝典:核心基础知识精讲
java·开发语言·面试·java基础·八股文
云起SAAS3 小时前
抖音私信助手私域用户触达私信群聊小工具小程序开源
小程序·ai编程·看广告变现轻·抖音私信助手·抖音私域用户触达·抖音私信群聊
ZNineSun3 小时前
第二章:Java到Go的思维转变
java·golang
白鲸开源3 小时前
(二)3.1.9 生产“稳”担当:Apache DolphinScheduler Worker 服务源码全方位解析
java·大数据·开源
Joan_Vivian3 小时前
旧项目适配Android15
android·java
华仔啊3 小时前
SpringBoot 中的 7 种耗时统计方式,你用过几种?
java·后端