vue开发之moment的使用

前言

在日常开发中,我们常常会遇到以下几种场景:
需要对日期进行非标准格式展示,如 :2021年5月11日星期二下午6点42分
需要对日期进行处理,如:要取前24小时的时间 等
在这时候用js原生的new Date()处理就有些麻烦了,因此我们找到了moment这个类库

一、moment是什么?

moment 是一个 JavaScript 日期处理类库。

二、使用步骤

  • 安装 moment
npm install moment -- save

安装完成

PS C:\Gitee\moment-demo> npm install moment -- save
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ save@2.9.0
+ moment@2.29.4
added 12 packages from 14 contributors and audited 877 packages in 13.36s

94 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

pagejson文件

  "dependencies": {
    "moment": "^2.29.4",
  },
  • 引入库
    1.在main.js中全局引入
import moment from "moment"

2.设定moment区域为中国

//import 方式
import 'moment/locale/zh-cn'
moment.locale('zh-cn');   

3.挂载全局变量

Vue.prototype.$moment = moment;

三、日期格式

格式 含义 举例 举例
yyyy 2021 同YYYY
M 1 不补0
MM 01
d 2 不补0
dd 02
dddd 星期 星期二
H 小时 3 24小时制; 不补0
HH 小时 18 24小时制
h 小时 3 12小时制,须和 A 或 a 使用;不补0
hh 小时 03 12小时制,须和 A 或 a 使用
m 分钟 4 不补0
mm 分钟 04
s 5 不补0
ss 05
A AM/PM AM 仅 format 可用,大写
a am/pm am 仅 format 可用,小写

四、应用代码示例

1.日期格式化:

  • 当前日期格式化
moment().format('MMMM Do YYYY, h:mm:ss a');//六月 3日 2023, 4:18:35 下午
moment().format("dddd");//星期六
moment().format("MMM Do YY");//6月 3日 23
moment().format("YYYY [escaped] YYYY");//2023 escaped 2023
moment().format();//2023-06-03T16:19:37+08:00
moment().format('YYYY-MM-DD');//2023-06-03
moment().format('YYYY-MM-DD h:mm:ss a'); //2023-06-03 4:26:16 下午
  • 指定日期格式化
moment("2020-06-03", "YYYY-MM-DD").fromNow(); //3 年前
moment().startOf("day").fromNow(); //当前日期开始即:2023/06/03/00:00:00相对于现在是: 17 小时前
moment().endOf("day").fromNow(); //当前日期结束即:2023/06/04/00:00:00相对于现在是: 7 小时后
moment().startOf("hour").fromNow(); //当前日期小时开始即:2023/06/03/16:00:00相对于现在是: 41 分钟前
  • 当前日期向前或者向后推的日期格式化
moment().subtract(13, "days").calendar(); // 当前时间往前推13天的日历时间: 2023/05/21
moment().subtract(3, "days").calendar(); // 当前时间往前推3天: 本周三16:46
moment().subtract(1, "days").calendar(); // 当前时间往前推1天: 昨天16:47
moment().calendar(); // 今天16:48
moment().add(1, "days").calendar(); // 当前时间往后推1天: 明天16:49
moment().add(3, "days").calendar(); // 当前时间往后推3天: 下周二16:50
moment().add(10, "days").calendar(); // 当前时间往后推10天: 2023/06/13
  • 其他方式日期格式化
moment().format("L"); //-> 2023/06/03
moment().format('l'); //-> 2023/6/4
moment().format('LL'); //-> 2023年6月4日
moment().format('ll'); //-> 2023年6月4日
moment().format('LLL'); //-> 2023年6月4日凌晨12点08分
moment().format('lll'); //-> 2023年6月4日 00:08
moment().format('LLLL'); //-> 2023年6月4日星期日凌晨12点09分
moment().format('llll'); //-> 2023年6月4日星期日 00:10

2.解析时间

  • 当前时间对象
var now = this.$moment(new Date()); //->Sun Jun 04 2023 00:18:45 GMT+0800
var now = this.$moment(); //->Sun Jun 04 2023 00:17:11 GMT+0800
  • 字符串解析时间
moment(String);
// 使用字符串创建时间日期对象时,先会检查字符串是否与ISO-8601相匹配,然后再通过 new Date(String) 创建对象

//ISO 8601字符串需要日期部分
2013-02-08  # A calendar date part
2013-W06-5  # A week date part
2013-039    # An ordinal date part

//还可以包括时间部分,通过空格或大写字母T与日期部分分开
2013-02-08T09            # An hour time part separated by a T
2013-02-08 09            # An hour time part separated by a space
2013-02-08 09:30         # An hour and minute time part
2013-02-08 09:30:26      # An hour, minute, and second time part
2013-02-08 09:30:26.123  # An hour, minute, second, and millisecond time part
2013-02-08 24:00:00.000  # hour 24, minute, second, millisecond equal 0 means next day at midnight

//任何日期部分都可以包含时间部分
2013-02-08 09  # A calendar date part and hour time part
2013-W06-5 09  # A week date part and hour time part
2013-039 09    # An ordinal date part and hour time part

//如果一个时间部分被包括,一个从UTC偏移量也可被包括为+-HH:mm,+-HHmm,或Z
2013-02-08 09+07:00            # +-HH:mm
2013-02-08 09-0100             # +-HHmm
2013-02-08 09Z                 # Z
2013-02-08 09:30:26.123+07:00  # +-HH:mm

//如果字符串与上述任何格式都不匹配且无法解析Date.parse,moment#isValid则返回false
moment("not a real date").isValid(); // false

  • 字符串+格式 创建对象
moment(String, String);
moment(String, String, String);
moment(String, String, Boolean);
moment(String, String, String, Boolean);
//如果您知道输入字符串的格式,则可以使用它来解析片刻
moment("12-25-1995", "MM-DD-YYYY");
//解析器忽略非字母数字字符,因此以下两个都将返回相同的内容
moment("12-25-1995", "MM-DD-YYYY");
moment("12/25/1995", "MM-DD-YYYY");
  • 多时间格式解析
moment(String, String[], String, Boolean);
moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
//首选阵列中较早的格式
moment("29-06-1995", ["MM-DD-YYYY", "DD-MM", "DD-MM-YYYY"]); // uses the last format
moment("05-06-1995", ["MM-DD-YYYY", "DD-MM-YYYY"]);          // uses the first format
//还可以指定locale和strictness参数。它们的工作方式与单格式情况相同
moment("29-06-1995", ["MM-DD-YYYY", "DD-MM-YYYY"], 'fr');       // uses 'fr' locale
moment("29-06-1995", ["MM-DD-YYYY", "DD-MM-YYYY"], true);       // uses strict parsing
moment("05-06-1995", ["MM-DD-YYYY", "DD-MM-YYYY"], 'fr', true); // uses 'fr' locale and strict parsing
  • 常用函数说明
//获取当前时间
moment();//Sun Jun 04 2023 15:12:11 GMT+0800

//获取今天0时0分0秒
moment().startOf('day'); /Sun Jun 04 2023 00:00:00 GMT+0800

//获取本周第一天(周日)0时0分0秒
moment().startOf("week"); //Mon May 29 2023 00:00:00 GMT+0800

//获取本周周一0时0分0秒
moment().startOf("isoWeek"); //Mon May 29 2023 00:00:00 GMT+0800

//获取当前月第一天0时0分0秒
moment().startOf("month"); //Thu Jun 01 2023 00:00:00 GMT+0800

//获取今天23时59分59秒
moment().endOf("day"); //Sun Jun 04 2023 23:59:59 GMT+0800

//获取本周最后一天(周六)23时59分59秒
moment().endOf("week"); //Sun Jun 04 2023 23:59:59 GMT+0800

//获取本周周日23时59分59秒
moment().endOf("isoWeek"); //Sun Jun 04 2023 23:59:59 GMT+0800

//获取当前月最后一天23时59分59秒
moment().endOf("month"); //Fri Jun 30 2023 23:59:59 GMT+0800

//获取当前月的总天数
moment().daysInMonth(); //30

//获取时间戳(以秒为单位)
moment().unix(); //1685863710
moment().format('X'); //1685863669

//获取时间戳(以毫秒为单位)
moment().valueOf(); //返回值为数值型:1685863954482
moment().format('x'); // 返回值为字符串类型:1685863897121

//获取年份
moment().year(); //2023
moment().get("year"); //2023

//获取月份
moment().month(); //5
moment().get("month"); //5

//获取一个月中的某一天
moment().date(); //4
moment().get("date"); //4

//获取一个星期中的某一天
moment().day(); //4
moment().weekday(); //6
moment().isoWeekday(); //7
moment().get("day"); //0
moment().get("weekday"); //6
moment().get("isoWeekday"); //7

//获取小时
moment().hours(); //15
moment().get("hours"); //15

//获取分钟
moment().minutes(); //46
moment().get("minutes"); //46

//获取秒数
moment().seconds(); //24
moment().get("seconds"); //41

//获取当前的年月日时分秒
moment().toArray(); //[ 2023, 5, 4, 15, 48, 40, 288 ]
moment().toObject(); //{ "years": 2023, "months": 5, "date": 4, "hours": 15, "minutes": 49, "seconds": 9, "milliseconds": 386 }


五、new Date() 相关

日期都写这么多了,那new Date()也一起总结下吧

let time = new Date();  //获取当前时间  Tue May 11 2021 18:42:51 GMT+0800 (中国标准时间)

let year = time.getFullYear();  //获取年 2021
let month = time.getMonth() + 1;  //获取月  5
let day = time.getDate();    //获取天  11

let h = time.getHours();   //获取小时  18
let m = time.getMinutes();  //获取分钟  42
let s = time.getSeconds();    //获取秒  51

let weekDay = time.getDay();  //获取星期  2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容