Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue学习笔记之moment.js日期处理控件

Vue学习笔记之moment.js日期处理控件

作者头像
Jetpropelledsnake21
发布于 2022-11-12 03:50:16
发布于 2022-11-12 03:50:16
13.6K00
代码可运行
举报
文章被收录于专栏:JetpropelledSnakeJetpropelledSnake
运行总次数:0
代码可运行

0x00 概述

本文主要记录moment.js日期控件在vue中的使用;

moment可以方便的计算自然月或者自然年份,避免使用固定天数或者月份计算导致结束日期错乱问题。

0x01 安装moment插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install moment --save

 在package.json中查看(moment插件安装成功)

在Vue的JS部分导入moment

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import moment from 'moment'

0x01 moment在项目中的应用

1.1 以月份为周期计算

 需求:根据开始日期和周期计算下次到期事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>  
      <el-form-item label="检定时间" prop="fVerificationDate" >
          <el-date-picker
              v-model="dataForm.fVerificationDate"
              type="date"
              placeholder="选择日期" 
              @input="fVerificationCycleCalculate2" 
          >
          </el-date-picker>
      </el-form-item>
 
      <el-form-item label="检定周期/月" prop="fVerificationCycle">
        <el-input v-model="dataForm.fVerificationCycle" placeholder="检定周期" @input="fVerificationCycleCalculate2"></el-input>
      </el-form-item>
 
      <el-form-item label="下次检定日期" prop="fNextVerificationDate">
        <!-- <el-input v-model="dataForm.fNextVerificationDate" placeholder="下次检定日期"></el-input> -->
           <el-date-picker
            v-model="dataForm.fNextVerificationDate"
            type="date"
            placeholder="选择日期" disabled>    //disabled 去掉可修改
          </el-date-picker>
      </el-form-item>
</template>
 
<script>
 
//引入moment组件   注意最下面需要添加   components:{moment},
 import moment from 'moment'    
 
 export default {
    data () {
      return {
           dataForm{
              fVerificationCycle: '',
              fNextVerificationDate: '',
              fVerificationDate: '',
                  },
           }
        },
    methods:{
               //检定周期计算/月
      fVerificationCycleCalculate2(){
            //判断检定时间,和周期不为空
        if(this.dataForm.fVerificationDate != null&&this.dataForm.fVerificationCycle !=''){
          console.log(this.dataForm.fVerificationDate)
          var a=moment(this.dataForm.fVerificationDate)
          var b=parseInt(this.dataForm.fVerificationCycle)
 
          var y=a.get('years')
          var m=a.get('months')
          var d=a.get('dates')  //特别注意:这里获取天数用   get("dates")
          // var d=moment.duration(a).asDays()
          //计算月份 获取月份+1加周期月份b
          var ms=m+1+b 
         
          if(parseInt(ms/12)>0){//大于12个月轮换一年
            y=y+(parseInt(ms/12))
            ms=ms-12*(parseInt(ms/12))
          }
          if(ms==0){//无0月,元月及1月。
            ms=1
          }
          var z =y + "-" + (ms < 10 ? ("0" + ms) : ms) + "-" + (d < 10 ? ("0" + d) : d) + '';
          this.dataForm.fNextVerificationDate=z
         
        }
      },
    },
   components:{moment},
}
 
</script>
 
 
 

1.2 以月份为周期计算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>  
        <el-form-item label="检定时间" prop="fVerificationDate" >
          <el-date-picker
            v-model="dataForm.fVerificationDate"
            type="date"
            value-format="timestamp"
            placeholder="选择日期" 
            @input="fVerificationCycleCalculate2" 
          >
          </el-date-picker>
      </el-form-item>
 
      <el-form-item label="检定周期/月" prop="fVerificationCycle">
        <el-input v-model="dataForm.fVerificationCycle" placeholder="检定周期" @input="fVerificationCycleCalculate2"></el-input>
      </el-form-item>
 
      <el-form-item label="下次检定日期" prop="fNextVerificationDate">
        <!-- <el-input v-model="dataForm.fNextVerificationDate" placeholder="下次检定日期"></el-input> -->
           <el-date-picker
            v-model="dataForm.fNextVerificationDate"
            type="date"
            placeholder="选择日期" disabled>    //disabled 去掉可修改
          </el-date-picker>
      </el-form-item>
 
</template>
 
<script>
 
//引入moment组件   注意最下面需要添加   components:{moment},
 import moment from 'moment'    
 
 export default {
    data () {
      return {
           dataForm{
              fVerificationCycle: '',
              fNextVerificationDate: '',
              fVerificationDate: '',
                  },
           }
        },
    methods:{
               //检定周期计算/天
      fVerificationCycleCalculate(){      //日期传入格式为时间戳格式 value-format="timestamp"
        console.log("检定时间:"+this.dataForm.fVerificationDate) ;
        console.log("检定周期"+(this.dataForm.fVerificationCycle));
        if(this.dataForm.fVerificationDate != null&&this.dataForm.fVerificationCycle !=''){
          console.log("检定周期"+(this.dataForm.fVerificationCycle)*(24 * 60 * 60 * 1000));
 
              this.dataForm.fNextVerificationDate=this.dataForm.fVerificationDate+((this.dataForm.fVerificationCycle)*(24 * 60 * 60 * 1000))
              console.log("下次检定日期"+this.dataForm.fNextVerificationDate);
           }
      },
    },
   components:{moment},
}
 
</script>

0x02 moment的常规用法

日期格式化 官网给出的几种情况(都是当前日期,若指定日期date, moment(date).format())

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 精确到毫秒
moment().valueOf()
## 1584182611042 ;返回值为数值类型
moment().format('x') 
## 返回值为字符串类型

# 精确到秒 
moment().unix()
##  1584182618 精确到秒  返回值为数值类型

moment().fomoment().format('X') 
##  返回值为字符串类型

生成指定时间的moment
moment().format('MMMM Do YYYY, h:mm:ss a'); // 三月 18日 2020, 9:31:24 上午
moment().format('dddd');                    // 星期三
moment().format("MMM Do YY");               // 3月 18日 20
moment().format('YYYY [escaped] YYYY');     // 2020 escaped 2020
moment().format();                          // 2020-03-18T09:31:24+08:00

##  根据固定的值转化为时分秒 
let time = this.$moment.duration(val, 'seconds')  //得到一个对象,里面有对应的时分秒等时间对象值
let hours = time.hours()
 let minutes = time.minutes()
 let seconds = time.seconds()
 item.valueC = this.$moment({h:hours, m:minutes, s:seconds}).format('HH:mm:ss')

获取对象
moment().toObject();
# 返回一个包括:年、月、日、时、分、秒、毫秒的对象
# {
    years: 2020
    months: 2
    date: 14
    hours: 18
    minutes: 47
    seconds: 56
    milliseconds: 526
}
格式化:
moment().format();
# 2020-03-14T19:14:05+08:00

获取时间:
# 获取今天000moment().startOf('day')

# 获取本周第一天(周日)000moment().startOf('week')

# 获取本周周一000moment().startOf('isoWeek')

# 获取当前月第一天000moment().startOf('month')

# 获取指定日期的000moment('2019-10-20').startOf('day')

# 获取今天235959moment().endOf('day')

# 获取本周最后一天(周六)235959moment().endOf('week')

# 获取本周周日235959moment().endOf('isoWeek')

# 获取当前月最后一天235959moment().endOf('month')

获取当月第一天是星期几:
# 用于设置星期几,其中星期日为 0、星期六为 6
moment().startOf('month').day()
获取前n天 / 后n天
moment().add(7, 'days');
moment().subtract(7, 'days')

比较两个时间的大小:
# 第二个参数用于确定精度,且不仅仅是要检查的单个值,因此使用 day 将会检查年份、月份、日期。

moment('2010-10-31').isBefore('2010-12-31', 'day');
# true

moment('2010-10-20').isBefore('2010-12-31', 'year');
# false

moment('2010-10-20').isAfter('2009-12-31', 'year'); 
# true

moment('2010-10-20').isSame('2009-12-31', 'year'); 
# 判断两个时间是否相等

# 需要注意的是, isBefore与isAfter 都是开区间,如果想使用闭区间,应使用
isSameOrBefore
isSameOrAfter

两个时间的相差几天:
moment([2008, 2, 27]).diff([2007, 0, 28], 'day');
# 424
是否是闰年:
moment().isLeapYear();
# true

moment([2001]).isLeapYear() 
# false

获取 月份和星期 枚举列表:
moment.months()

# ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

moment.monthsShort()
# ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

moment.weekdays()
# ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]

moment.weekdaysMin()
# ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]


moment().format('YYYY-MM-DD HH:mm:ss');
# 2020-03-14 19:23:29

moment(date).format('YYYY-MM-DD HH:mm:ss')
moment(date).format('YYYY-MM-DD')
moment(date).format('YYYY~MM~DD HH:mm:ss')
moment(date).format('YYYY~MM~DD')

// 由此类推还可以自定义很多种格式,包括这种混合分隔符号也是可以的,当然现实中很少有这样的需求
moment(date).format('YYYY~MM~DD HH+mm:ss')

项目中日期快捷选择:今日、昨日、本周、 上周、 本月、 上月、 本年、 去年

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//假设今天为2020.12.2号

//本月第一天
moment().startOf('month').format('YYYY-MM-DD'); //2020-12-01
//本月最后一天
moment().endOf('month').format('YYYY-MM-DD'); //2020-12-31

//上个月第一天
moment().subtract(1,'month').startOf('month').format('YYYY-MM-DD') //2020-11-01
//上月最后一天
moment().subtract(1,'month').endOf('month').format('YYYY-MM-DD') //2020-11-30

//今年第一天
moment().startOf('year').format('YYYY-MM-DD') //2020-01-01

//去年第一天
moment().subtract(1,'year').startOf('year').format('YYYY-MM-DD') //2019-01-01
//去年最后一天
moment().subtract(1,'year').endOf('year').format('YYYY-MM-DD') //2019-12-31

//一年前
moment().subtract(1,'year').format('YYYY-MM-DD'); //2019-12-02


//昨天
moment().subtract(1,'day').format('YYYY-MM-DD') //2020-12-01

//今天
moment().format('YYYY-MM-DD') //2020-12-02

// 本季度
const  start = moment().startOf('quarter').format('YYYY-MM-DD')   // 开始
const end = moment().endOf('quarter').format('YYYY-MM-DD')   // 结束

// 上季度
const start = moment().quarter(moment().quarter() - 1).startOf('quarter').format('YYYY-MM-DD')
const end = moment().quarter(moment().quarter() - 1).endOf('quarter').format('YYYY-MM-DD')

// 本周
 const start = moment().startOf('week') .add(1, 'day').format('YYYY-MM-DD HH:mm:ss')
 const end = moment().endOf('week').add(1, 'day').format('YYYY-MM-DD HH:mm:ss')

// 上周
 const start = moment().subtract(weekOfDay + 7 - 1, 'days') .format('YYYY-MM-DD')
  const end  = moment().subtract(weekOfDay, 'days') .format('YYYY-MM-DD')

// 本年
 const start = moment() .year(moment().year()) .startOf('year') .format('YYYY-MM-DD')
 const end = moment() .year(moment().year())  .endOf('year').format('YYYY-MM-DD')

时间比较

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取当前时间
moment() // 获取当前时间
moment().diff(moment('2020-07-08'),'days') // 当前时间和指定时间对比

// 两个自定义的时间对比
moment('2020-08-09').diff(moment('2020-07-08'),'days') //32

let diff = moment(date1).format('x') - moment(date1).format('x');
let time = moment.duration(diff);
let days = time.days();//天数差
let hours = time.hours();//小时差
let minutes = time.minutes();//分钟差

时间加减法,根据当前日期(date)和给定差值(num),和要计算的类型(type,可以是years,months,weeks,days,hours,minutes,seconds)推算前多少个日期,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
moment(date).subtract(num, type).format('YYYY-MM-DD HH:mm:ss');
//推算(2020-03-25 00:00:00)前一年
moment("2020-03-25 00:00:00").subtract(1, "years").format('YYYY-MM-DD HH:mm:ss');//2019-03-25 00:00:00
//推算(2020-03-25 00:00:00)前5天
moment("2020-03-25 00:00:00").subtract(5, "days").format('YYYY-MM-DD HH:mm:ss');//2020-03-20 00:00:00


moment(date).add(num, type).format('YYYY-MM-DD HH:mm:ss');
//推算(2020-03-25 00:00:00)后一年
moment("2020-03-25 00:00:00").add(1, "years").format('YYYY-MM-DD HH:mm:ss');//2021-03-25 00:00:00
//推算(2020-03-25 00:00:00)后5天
moment("2020-03-25 00:00:00").add(5, "days").format('YYYY-MM-DD HH:mm:ss');//2020-03-30 00:00:00

js通过Moment.js让数值秒值和时分秒格式相互转化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/ / 1、把时分秒格式转化为数值型的秒值
<script src="https://momentjs.com/downloads/moment.js"></script>
<script>
    let time=moment.duration('01:01:01').as('seconds')
    console.log(time)  //3661
</script>

//  2、把数值型的秒值转化为时分秒格式
<script src="https://momentjs.com/downloads/moment.js"></script>
<script>
  let time = moment.duration(3661, 'seconds')  //得到一个对象,里面有对应的时分秒等时间对象值
  let hours = time.hours() 
  let minutes = time.minutes()
  let seconds = time.seconds()
  console.log(moment({h:hours, m:minutes, s:seconds}).format('HH:mm:ss'))
  //01:01:01
</script>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Servlet 详解
当服务器每次接收到请求时,都会调用 service 方法,该方法是会被多次调用的。
wsuo
2020/07/31
8330
Servlet 详解
Java匹马行天下之JavaWeb核心技术——Servlet
Servlet是在服务器上运行的小程序,也就是一个Java类,但比较特殊,不需要new,自动就可以运行。也有创建、垃圾回收和销毁过程。Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
泰斗贤若如
2019/06/18
7640
谈谈 ServletConfig 和 ServletContext
一、ServletConfig 和 ServletContext 的概念含义创建时期作用范围二、ServletConfig 和 SerlvetContext 代码表示ServletConfigServletContext
cxuan
2019/06/03
4400
JavaWeb入门之Servlet基础 1
首先来简单介绍一下Servlet,它是和平台无关的服务器端组件,运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应的模式”。
黄桂期
2018/05/13
9861
第71节:Java中HTTP和Servlet
什么是协议,就是规则,规范,用于双方在交互,通讯的时候遵循的一种规范,规则.而http协议是对网络上的客户端和服务端在执行http请求的时候遵循的一种规范,其实就是规定了客户端在访问服务器端的时候,要带上一些东西,服务端返回数据的时候,也要带点东西,礼尚往来嘛!!!
达达前端
2019/07/03
5540
第71节:Java中HTTP和Servlet
Servlet 学习笔记
Servlet 运行在服务器上的 java 类; Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据。 现在我们知道了 Servlet 是运行在服务器上的 Java 类,那么什么是服务器?我们平常最常用的服务器都有哪些呢?   服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应;   最常用的Web服务器是Apache和Microsoft的Internet信息服务器。 对于现在大多
bgZyy
2018/05/16
6760
Web---演示servlet技术(servlet生命周期),解决中文乱码问题
本节讲解决中文乱码问题的4种方法。 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼♪(^∇^*)~过段时间才会学。
谙忆
2021/01/21
5000
Web---演示servlet技术(servlet生命周期),解决中文乱码问题
Servlet API 架构详解Servlet、GenericServlet、HttpServletServletConfigServletContext
对于web容易来说,所有servlet都必须有的行为,规范在servlet接口中:
desperate633
2018/08/22
7240
Servlet API 架构详解Servlet、GenericServlet、HttpServletServletConfigServletContext
JavaWeb后端入门6—Servlet
Servlet是一个运行在Web服务器上的Java程序,用于处理从Web客户端发送的请求并对请求做出响应。
用户6948990
2025/04/03
1210
JavaWeb后端入门6—Servlet
Servlet详解
Servlet是server+Applet的缩写,表示一个服务器应用。Servlet就是一套规范,按照这套规范写的代码就可以直接在Java服务器上面运行。
秋白
2019/02/21
6220
Servlet详解
Servlet配置初始值,并获取初始值
配置了两个初始值 username和password值分别为root和123456
手撕代码八百里
2020/07/28
7650
Servlet配置初始值,并获取初始值
Servlet技术【第一篇】入门请不要放弃
Servlet概述、实现、细节、获取资源、ServletConfig、ServletContext
BWH_Steven
2019/08/29
1.1K0
Servlet技术【第一篇】入门请不要放弃
Servlet 详解
1、什么是 Servlet? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程
IT可乐
2018/01/04
1.2K0
Servlet 详解
JavaWeb三大组件(Servlet程序、Filter过滤器、Listener监听器)
启动tomcat,浏览器访问http://localhost:8080/springmvc/servletlifecycle,控制台打印:
Java微观世界
2025/01/21
6890
JavaWeb三大组件(Servlet程序、Filter过滤器、Listener监听器)
servlet反射、生命周期、接口
Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
eadela
2019/09/29
3880
servlet反射、生命周期、接口
Servlet和JSP学习指导与实践(一):Servlet API初探
  JavaSE如何跨度到JavaEE?原本java语言只是专门用于application桌面小应用程序的开发,但自从其追随CGI进入服务器端的开发之后便一发不可收拾。先是Servlet1.0,再是2.0,然后又3.0 ... 之后,各种基于Web的框架发展迅猛,Spring,Struts,Struts2等等。从事Java的人不少都是从jsp开始,甚至从框架开始,但却不知Servlet为何物?本系列将专门讲述Java Web的始祖---“Servlet”(会讲述JSP相关内容,但其实JSP也是Servlet)。
云海谷天
2022/08/09
2930
Servlet和JSP学习指导与实践(一):Servlet API初探
JavaEE基础(02):Servlet核心API用法详解
一、核心API简介 1、Servlet执行流程 Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:接收请求数据;处理请求;完成响应。 2、核心API简介 API 作用描述 ServletConfig 获取servlet初始化参数和servletContext对象。 ServletContext 在整个Web应用的动态资源之间共享数据。 Se
知了一笑
2019/12/19
5410
JavaWeb入门之Servlet小练习
在web.xml文件中设置两个WEB应用的初始化参数,username,password,创建一个html页面,定义两个请求字段并发送到一个Servlet中,对应web.xml中的参数是否一样;若一致,响应hello:username;若失败则Sorry:username
黄桂期
2018/05/16
1.1K5
Servlet基础入门学习1
描述:在进行JavaWeb开发学习的时候必不可少就是Tomcat Web 容器服务器,因为它开源免费、便于上手,并且使用安装简单。
全栈工程师修炼指南
2020/10/23
7820
Servlet基础入门学习1
javaweb之Filter生命周期和FilterConfig
我们前面学习过Servlet的生命周期,同样FilterConfig的生命周期也差不多。这篇来学习Filter的生命周期和FilterConfig这两个知识点。
凯哥Java
2019/08/07
3540
javaweb之Filter生命周期和FilterConfig
相关推荐
Servlet 详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验