美文网首页uniapp
uniapp时间组件,可选择年月日时分秒

uniapp时间组件,可选择年月日时分秒

作者: 祈澈菇凉 | 来源:发表于2024-09-02 22:08 被阅读0次

1:在components底下新建一个DateTimePicker.vue
DateTimePicker.vue

<template>
  <view>
    <picker mode="multiSelector" :value="multiIndex" :range="multiRange" @change="onMultiChange">
      <view class="picker">
        <input type="text" :value="formattedDateTime" readonly />
        <text class="picker-label">选择时间</text>
      </view>
    </picker>
  </view>
</template>

<script>
export default {
  props: {
    value: {
      type: String,
      default: ''
    },
    defaultTime: {
      type: String,
      default: () => {
        const now = new Date();
        return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`;
      }
    }
  },
  data() {
    const now = new Date();
    return {
      multiIndex: [
        now.getFullYear() - 1900,
        now.getMonth(),
        now.getDate() - 1,
        now.getHours(),
        now.getMinutes(),
        now.getSeconds()
      ],
      multiRange: this.getMultiRange()
    };
  },
  computed: {
    formattedDateTime() {
      const year = this.multiRange[0][this.multiIndex[0]];
      const month = String(this.multiRange[1][this.multiIndex[1]]).padStart(2, '0');
      const day = String(this.multiRange[2][this.multiIndex[2]]).padStart(2, '0');
      const hour = String(this.multiRange[3][this.multiIndex[3]]).padStart(2, '0');
      const minute = String(this.multiRange[4][this.multiIndex[4]]).padStart(2, '0');
      const second = String(this.multiRange[5][this.multiIndex[5]]).padStart(2, '0');

      return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
    }
  },
  methods: {
    getMultiRange() {
      let yearRange = [];
      let monthRange = [];
      let dayRange = [];
      let hourRange = [];
      let minuteRange = [];
      let secondRange = [];
      
      for (let i = 1900; i <= 2100; i++) yearRange.push(i);
      for (let i = 1; i <= 12; i++) monthRange.push(i);
      for (let i = 1; i <= 31; i++) dayRange.push(i);
      for (let i = 0; i <= 23; i++) hourRange.push(i);
      for (let i = 0; i <= 59; i++) minuteRange.push(i);
      for (let i = 0; i <= 59; i++) secondRange.push(i);
      
      return [yearRange, monthRange, dayRange, hourRange, minuteRange, secondRange];
    },
    onMultiChange(e) {
      this.multiIndex = e.detail.value;
      this.$emit('input', this.formattedDateTime);
    }
  },
  watch: {
    value(newValue) {
      const dateParts = newValue.split(/[- :]/);
      if (dateParts.length === 6) {
        this.multiIndex = [
          parseInt(dateParts[0]) - 1900,
          parseInt(dateParts[1]) - 1,
          parseInt(dateParts[2]) - 1,
          parseInt(dateParts[3]),
          parseInt(dateParts[4]),
          parseInt(dateParts[5])
        ];
      }
    }
  }
};
</script>

<style>
.picker {
  display: flex;
  align-items: center;
  padding: 10px;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 5px;
  cursor: pointer; /* 使其看起来像可点击的按钮 */
}
input {
  flex: 1;
  border: none;
  outline: none;
  padding: 0;
}
.picker-label {
  margin-left: 10px;
  color: #007BFF; /* 可选:设置文字颜色 */
}
</style>

2:在test里面引用页面

<template>
  <view>
    <DateTimePicker v-model="formData.applyTime" :defaultTime="defaultTime" />
    <button @click="submitForm">提交</button>
  </view>
</template>

<script>
import DateTimePicker from '@/components/DateTimePicker.vue'; // 根据实际路径引入

export default {
  components: {
    DateTimePicker
  },
  data() {
    const now = new Date();
    return {
      formData: {
        applyTime: ''
      },
      defaultTime: `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`
    };
  },
  methods: {
    submitForm() {
      const applyTime = this.formData.applyTime || this.defaultTime; // 使用默认时间
      console.log('提交数据:', applyTime);
      // 提交逻辑
    }
  }
};
</script>

<style>
/* 添加样式 */
</style>

效果


相关文章

  • datetime:时间戳转换

    将时间戳转换为年月日时分秒格式: 将年月日时分秒格式转换为时间戳:

  • 系统时间相关-date

    1.查看系统时间 年月日 完整显示年月日 完整显示年月日 时分秒 时分秒 星期 显示过去或未来的时间信息: 同步系...

  • day19-time模块

    1. 时间模块 主要包含处理年月日时分秒对应的时间(着重时分秒)import time 专门处理年月日import...

  • day19-time模块

    01-时间模块 主要包含处理年月日时分秒对应的时间(着重时分秒)import time 专门处理年月日import...

  • Day19-课堂笔记-time

    主要包含处理年月日时分秒对应的时间(着重时分秒)import time专门处理年月日import datetime...

  • day19时间模块

    时间模块 主要包含处理年月日时分秒对应的时间(着重时分秒) 专门处理年月日 1.获取当前时间 时间戳:就是从格林威...

  • 常用函数

    时间日期函数 1、获取当前系统时间,时间格式包括年月日时分秒 2、只获取系统时分秒 3、只获取当前系统时间的年月日...

  • 微信小程序自定义picker年月日时分秒选择器组件

    功能:年月日时分秒,固定选择范围效果: 自定义组件实现:utils/datePicker.js 定义组件compo...

  • day19time模块

    01-时间模块 模块中主要包含处理年月日时分秒对应的时间(着重时分秒) 专门用来处理年月日 1.获取当前时间时间戳...

  • UTC时间与时区时间转换

    描述 时间日期与time stamp转换 参考 C语言实现将时间戳转换为年月日时分秒和将年月日时分秒转换为时间戳 ...

网友评论

    本文标题:uniapp时间组件,可选择年月日时分秒

    本文链接:https://www.haomeiwen.com/subject/ojfkljtx.html