• Vue 中 (moment)操作日期的加减与展示


    目录

    基本语法 :

    展示效果如下: 

     使用方式:

    1、首先在 pacaage.json 中引入依赖 "moment": "^2.29.4"

     2、然后命令行 install 安装 :

    3、最后,在使用的页面引入moment 

    4、data 中我定义了一个初始控制变量 ctrlEndDate ,用来控制可选择的截止时间为当前时间。

    5、页面 view 编写时间选择器的元素

    6、函数控制

    总结

    几种加日期的方法:

    减日期时间

    其他用法


    基本语法 :

    1. moment().add(Number, String);//通过类型添加
    2. moment().add(Duration);//时间间隔duration
    3. moment().add(Object);//也可以使用对象

    展示效果如下: 

     使用方式:

    1、首先在 pacaage.json 中引入依赖 "moment": "^2.29.4"

     2、然后命令行 install 安装 :

    npm install moment

    3、最后,在使用的页面引入moment 

    import moment from "moment";

    4、data 中我定义了一个初始控制变量 ctrlEndDate ,用来控制可选择的截止时间为当前时间。

    ctrlEndDate: moment().format("YYYY-MM-DD"), 

    这里我在 data 内部还定义了一个变量,用来存放工作经历的数组变量 personJobList

    personJobList:[{}],

    5、页面 view 编写时间选择器的元素

    1. <view class="mform" :hidden="tabbHidden" style="background: #d3e0ef;border-radius: 18px;margin-bottom:10px;"
    2. v-for="(item,index) in personJobList" :key="index">
    3. <view class="item">
    4. <view class="t">删除view>
    5. <uni-icons type="minus" size="22" color="#4184ff" style="position:absolute;margin-top: 5px;right: 0;width: 5%;" @click="deleteJob(index)">uni-icons>
    6. view>
    7. <view class="item">
    8. <view class="t must">职位view>
    9. <input v-model="item.position" class="m" placeholder="请输入职位"/>
    10. view>
    11. <view class="item">
    12. <view class="t must">公司view>
    13. <textarea v-model="item.company" class="m" placeholder="请输入公司">textarea>
    14. view>
    15. <view class="item">
    16. <view class="t must">开始时间view>
    17. <picker class="m" mode="date" v-model="item.startDate" :start="item.ctrlEsstartDate" :end="ctrlEndDate" @change="bindStartDateChange($event,index)">
    18. <input type="text" disabled="true" v-model="item.startDate" placeholder="请选择开始时间"/>
    19. picker>
    20. view>
    21. <view class="item">
    22. <view class="t must">结束时间view>
    23. <picker class="m" mode="date" v-model="item.endDate" :start="item.ctrlEestartDate" :end="ctrlEndDate" @change="bindEndDateChange($event,index)">
    24. <input type="text" disabled="true" v-model="item.endDate" placeholder="请选择结束时间"/>
    25. picker>
    26. view>
    27. view>
    28. <view style="text-align: center;color: #4184ff;padding: 10px 0 10px 0;" @tap="addJob()">添加工作经历view>

    这里我们主要关注以下时间选择器相关的内容即可

    1. <view class="item">
    2. <view class="t must">开始时间view>
    3. <picker class="m" mode="date" v-model="item.startDate" :start="item.ctrlEsstartDate" :end="ctrlEndDate" @change="bindStartDateChange($event,index)">
    4. <input type="text" disabled="true" v-model="item.startDate" placeholder="请选择开始时间"/>
    5. picker>
    6. view>
    7. <view class="item">
    8. <view class="t must">结束时间view>
    9. <picker class="m" mode="date" v-model="item.endDate" :start="item.ctrlEestartDate" :end="ctrlEndDate" @change="bindEndDateChange($event,index)">
    10. <input type="text" disabled="true" v-model="item.endDate" placeholder="请选择结束时间"/>
    11. picker>
    12. view>

    mode : 代表时间的展示格式,我这里需要的就是 date

    :start :代表时间可选择的开始节点

    :end :代表时间可选择额截止节点(这里我控制的是当前时间,也就是 data 初始定义的变量ctrlEndDate)

    @change :绑定的时间变化时的事件所触发的函数

    6、函数控制

    bindStartDateChange 是开始时间绑定的函数

    bindEndDateChange 是结束时间绑定的函数

    1. bindStartDateChange: function(e,index) {
    2. this.$nextTick(() => {
    3. setTimeout(() => {
    4. this.personJobList[index].startDate = e.detail.value;
    5. this.personJobList[index].ctrlEestartDate = moment(e.detail.value).add(1, 'days').format("YYYY-MM-DD");
    6. this.$forceUpdate() //强制更新
    7. }, 0)
    8. });
    9. },
    10. bindEndDateChange: function(e,index) {
    11. if(!Common.isExist(this.personJobList[index].startDate)){
    12. Common.alert("清先选择开始时间");
    13. return false;
    14. }
    15. this.$nextTick(() => {
    16. setTimeout(() => {
    17. this.personJobList[index].endDate = e.detail.value;
    18. this.$forceUpdate() //强制更新
    19. }, 0)
    20. });
    21. },

    下面是我页面上添加工作履历和删除工作履历的函数

    1. addJob(){
    2. for (var i = 0; i < this.personJobList.length; i++) {
    3. if(!Common.isExist(this.personJobList[i].position)){
    4. Common.alert("第"+(i+1)+"个工作经历中职位不可为空!");
    5. return false;
    6. }
    7. if(!Common.isExist(this.personJobList[i].position)){
    8. Common.alert("第"+(i+1)+"个工作经历中公司不可为空!");
    9. return false;
    10. }
    11. if(!Common.isExist(this.personJobList[i].startDate)){
    12. Common.alert("第"+(i+1)+"个工作经历中开始时间不可为空!");
    13. return false;
    14. }
    15. if(!Common.isExist(this.personJobList[i].endDate)){
    16. Common.alert("第"+(i+1)+"个工作经历中结束时间不可为空!");
    17. return false;
    18. }
    19. }
    20. let tempObj = {};
    21. if(this.personJobList.length>=1){
    22. let prevJobObj = this.personJobList[this.personJobList.length-1];
    23. tempObj = {"ctrlEsstartDate":moment(prevJobObj.endDate).add(1, 'days').format("YYYY-MM-DD")};
    24. this.$nextTick(() => {
    25. setTimeout(() => {
    26. this.personJobList.push(tempObj);
    27. this.$forceUpdate() //强制更新
    28. }, 0)
    29. });
    30. }
    31. },
    32. deleteJob(index){
    33. this.personJobList.splice(index,1);
    34. },

    以上函数内,我用到了指定日期加一天的操作,那么下面就是它的使用类型。

    类型

    全(缩)写描述
    years(y)
    quarters(Q)季度
    months(M)
    weeks(w)
    days(d)
    hours(h)
    minutes(m)
    seconds(s)
    milliseconds(ms)毫秒

    比如:我要指定时间,2022-10-01 加一天

    moment("2022-10-01").add(1, 'days').format("YYYY-MM-DD")

    我这里用到的是 days ,你可以根据自己的需求来加 x 天(days),x 周(weeks)...

    moment() 如果不指定时间,那就是默认当前时间。

    总结

    几种加日期的方法:

    • 链式添加时间
    1. moment().add(7, 'days').add(1, 'months');
    • 使用对象添加时间
    1. moment().add({days:7,months:1});
    • 时间间隔 duration
    1. var duration = moment.duration({'days' : 1});
    2. moment().add(duration);
    • 指定特地日期时间
    moment("2018-01-28").add(1, 'months');
    

    减日期时间

    • 语法
    1. moment().subtract(Number, String);
    2. moment().subtract(Duration);
    3. moment().subtract(Object);

    用法,类似于添加日期

    其他用法

    • 格式化时间以及获取时间戳方法
    1. moment(Date.now()).format("YYYY-MM-DD HH:mm:ss");//获取格式时间
    2. moment(Date.now(), 'YYYY-MM-DD HH:mm:ss').valueOf();//获取时间戳
    •  把服务器地址转化成本地地址
    1. import moment from "moment";
    2. import 'moment/src/locale/en-gb'
    3. parseDate = (date) => {
    4. //先确认是utc时间
    5. date = date.replace(" ", "T");
    6. utcDate = date + "Z";
    7. moment.locale("en-GB");
    8. console.log(moment(localDate));
    9. return moment(utcDate).format("DD-MM-YYYY");
    10. };

  • 相关阅读:
    Centos7 docker 容器内root身份应用自启动 & /usr/sbin/init 问题
    DMA编程
    SpringMVC请求、响应与异步请求
    LVGL中LV_SCROLL_SNAP_CENTER宏的作用
    js兼容性的汇总
    java: 错误:无效的源发行版
    Linux--system函数
    低代码+BPM为一体构建的知识管理系统
    微信小程序通过startLocationUpdate,onLocationChange获取当前地理位置信息,配合腾讯地图解析获取到地址
    Python入门之函数调用
  • 原文地址:https://blog.csdn.net/weixin_36754290/article/details/128168847