欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3+vant4封裝日期時間組件方式(年月日時分秒)

 更新時間:2023年10月25日 08:48:07   作者:跳跳的小古風(fēng)  
這篇文章主要介紹了vue3+vant4封裝日期時間組件方式(年月日時分秒),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

vue3+vant4封裝日期時間組件

vant4目前無法直接使用vant3自帶的年月日時分秒組件,綜合考慮下,決定自己封裝一個!

效果圖

在這里插入圖片描述

代碼片段

核心組件代碼

<template>
  <!-- 彈出層 -->
  <van-popup v-model:show="data.isPicker" position="bottom" round @close="confirmOn">
    <van-picker ref="picker" title="請選擇時間" :columns="data.columns" @change="onChange" @cancel="cancelOn"
      @confirm="onConfirm" v-model="data.selectedValues" />
  </van-popup>
</template>
<script setup>

import { reactive, watch, getCurrentInstance } from "vue";

const customFieldName = {
  text: "value",
  value: "values",
  children: ""
};
const data = reactive({
  isPicker: false, //是否顯示彈出層
  columns: [], //所有時間列
  selectedValues: [] //控件選擇的時間值
});

const props = defineProps({
  // 傳入的顯影狀態(tài)
  showPicker: {
    type: Boolean
  },
  // 傳入的值
  values: {
    type: String
  }
});

//定義要向父組件傳遞的事件
const emit = defineEmits(["changeValue", "confirm"]);


watch(
  () => props.showPicker,
  val => {
    data.isPicker = val;
    data.columns = [];
    getcolumns();
  },
  {
    immediate: true//立即監(jiān)聽--進入就會執(zhí)行一次 監(jiān)聽顯影狀態(tài)
  }
);


function onChange() {
  // 無用的方法 
}


function getcolumns() {
  let strtime = props.values; //傳入的時間
  //console.log(strtime); 2023-09-05 19:28:00 
  let date = new Date(strtime.replace(/-/g, "/"));
  // console.log(date); Wed Aug 09 2023 14:53:15 GMT+0800 (中國標(biāo)準(zhǔn)時間) 
  let timeVaules = date.getTime();

  let dateVaules;
  if (props.values != "") {
    dateVaules = new Date(timeVaules);
  } else {
    dateVaules = new Date(); //沒有傳入時間則默認(rèn)當(dāng)前時刻
  }

  let Y = dateVaules.getFullYear();
  let M = dateVaules.getMonth();
  let D = dateVaules.getDate();
  let h = dateVaules.getHours();
  let m = dateVaules.getMinutes();
  let s = dateVaules.getSeconds();

  let year = []; //獲取前后十年數(shù)組
  year.values = [];
  let Currentday = new Date().getFullYear();
  for (let i = Currentday - 10; i < Currentday + 10; i++) {
    year.push({ text: i.toString(), value: i });
  }
  year.defaultIndex = year.values.indexOf(Y); //設(shè)置默認(rèn)選項當(dāng)前年

  // 個位數(shù)補0
  const _M = M < 10 ? `0${M + 1}` : M.toString(); //月份比實際獲取的少1,所以要加1
  const _D = D < 10 ? `0${D}` : D.toString();
  const _h = h < 10 ? `0${h}` : h.toString();
  const _m = m < 10 ? `0${m}` : m.toString();
  const _s = s < 10 ? `0${s}` : s.toString();

  // 生成年月日時分秒時間值
  data.selectedValues.push(Y);
  data.selectedValues.push(_M);
  data.selectedValues.push(_D);
  data.selectedValues.push(_h);
  data.selectedValues.push(_m);
  data.selectedValues.push(_s);

  data.columns.push(year); //生成年列

  let month = []; //獲取12月數(shù)組
  month = Object.keys(Array.apply(null, { length: 13 })).map(function (item) {
    if (+item + 1 <= 10) {
      return { text: "0" + item, value: "0" + item };
    } else if (+item + 1 == 11) {
      return { text: +item, value: +item };
    } else {
      return {
        text: (+item + 0).toString(),
        value: (+item + 0).toString()
      };
    }
  });
  month.splice(0, 1);
  data.columns.push(month); //生成月列

  //獲取當(dāng)月的天數(shù)
  let days = getCountDays(Y, M + 1);
  let day = []; //創(chuàng)建當(dāng)月天數(shù)數(shù)組
  day = Object.keys(Array.apply(null, { length: days + 1 })).map(function (
    item
  ) {
    if (+item + 1 <= 10) {
      return { text: "0" + item, value: "0" + item };
    } else if (+item + 1 == 11) {
      return { text: +item, value: +item };
    } else {
      return {
        text: (+item + 0).toString(),
        value: (+item + 0).toString()
      };
    }
  });
  day.splice(0, 1);
  data.columns.push(day); //生成日列

  let hour = []; //創(chuàng)建小時數(shù)組
  hour = Object.keys(Array.apply(null, { length: 24 })).map(function (item) {
    if (+item + 1 <= 10) {
      return { text: "0" + item, value: "0" + item };
    } else if (+item + 1 == 11) {
      return { text: +item, value: +item };
    } else {
      return {
        text: (+item + 0).toString(),
        value: (+item + 0).toString()
      };
    }
  });
  data.columns.push(hour); //生成小時列

  let mi = []; //創(chuàng)建分鐘數(shù)組
  mi = Object.keys(Array.apply(null, { length: 60 })).map(function (item) {
    if (+item + 1 <= 10) {
      return { text: "0" + item, value: "0" + item };
    } else if (+item + 1 == 11) {
      return { text: +item, value: +item };
    } else {
      return {
        text: (+item + 0).toString(),
        value: (+item + 0).toString()
      };
    }
  });
  data.columns.push(mi);//生成分鐘列

  let ss = []; //創(chuàng)建秒數(shù)數(shù)組
  ss = Object.keys(Array.apply(null, { length: 60 })).map(function (item) {
    if (+item + 1 <= 10) {
      return { text: "0" + item, value: "0" + item };
    } else if (+item + 1 == 11) {
      return { text: +item, value: +item };
    } else {
      return {
        text: (+item + 0).toString(),
        value: (+item + 0).toString()
      };
    }
  });
  data.columns.push(ss);//生成秒鐘列
}


function getCountDays(year, month) {
  //獲取某年某月多少天
  let day = new Date(year, month, 0);
  return day.getDate();
}

// 關(guān)閉彈框
function confirmOn() {
  emit("changeValue");
}


//時間選擇器關(guān)閉 值不改變并關(guān)閉彈框
function cancelOn({ selectedValues }) {
  confirmOn()
}

// 時間選擇器確定 值改變
function onConfirm({ selectedValues }) {
  let endval =
    selectedValues[0] +
    "-" +
    selectedValues[1] +
    "-" +
    selectedValues[2] +
    " " +
    selectedValues[3] +
    ":" +
    selectedValues[4] +
    ":" +
    selectedValues[5];

  confirmOn()
  emit("confirm", endval);
}
</script>


引入

 
import DataTime from "@/components/datatime/index.vue";
...
const startTime = ref(""); //值定義
const showPicker = ref(false); //彈框顯隱

const onConfirm = selectedValues => {
  //console.log(selectedValues);
  //2023-09-08 19:01:37
  startTime.value = selectedValues;
  showPicker.value = false;
};

 <DataTime
   :values="endTime"
    @changeValue="showPicker = false" //子組件方法
    :showPicker="showPicker"
    @confirm="onConfirm" //子組件方法
  />
  ...

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在vue中高德地圖引入和軌跡的繪制的實現(xiàn)

    在vue中高德地圖引入和軌跡的繪制的實現(xiàn)

    這篇文章主要介紹了在vue中高德地圖引入和軌跡的繪制的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 基于vue-cli、elementUI的Vue超簡單入門小例子(推薦)

    基于vue-cli、elementUI的Vue超簡單入門小例子(推薦)

    這篇文章主要介紹了基于vue-cli、elementUI的Vue超簡單入門小例子,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue.js?的過濾器你了解多少

    Vue.js?的過濾器你了解多少

    這篇文章主要為大家詳細(xì)介紹了Vue.js?的過濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue-json-editor json編輯器的使用

    vue-json-editor json編輯器的使用

    本文主要介紹了vue-json-editor json編輯器的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • VUE axios上傳圖片到七牛的實例代碼

    VUE axios上傳圖片到七牛的實例代碼

    本篇文章主要介紹了VUE axios上傳圖片到七牛的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • vue2.0 根據(jù)狀態(tài)值進行樣式的改變展示方法

    vue2.0 根據(jù)狀態(tài)值進行樣式的改變展示方法

    下面小編就為大家分享一篇vue2.0 根據(jù)狀態(tài)值進行樣式的改變展示方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue的hover/click事件如何動態(tài)改變顏色和背景色

    Vue的hover/click事件如何動態(tài)改變顏色和背景色

    這篇文章主要介紹了Vue的hover/click事件如何動態(tài)改變顏色和背景色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Vue使用xlsx插件導(dǎo)出excel文件的詳細(xì)指南

    Vue使用xlsx插件導(dǎo)出excel文件的詳細(xì)指南

    第三方庫xlsx提供了強大的功能來處理Excel文件,它可以簡化導(dǎo)出Excel文件這個過程,下面小編就來為大家詳細(xì)講講Vue如何通過xlsx導(dǎo)出excel,需要的小伙伴可以了解下
    2025-04-04
  • Vue3響應(yīng)式對象是如何實現(xiàn)的(2)

    Vue3響應(yīng)式對象是如何實現(xiàn)的(2)

    這篇文章主要介紹了Vue3響應(yīng)式對象是如何實現(xiàn)的,文章基于上篇文章展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 關(guān)于pinia的簡單使用方式

    關(guān)于pinia的簡單使用方式

    這篇文章主要介紹了關(guān)于pinia的簡單使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論