Moment.js常见用法总结

Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率。
日常开发中,通常会对时间进行下面这几个操作:比如获取时间,设置时间,格式化时间,比较时间等等。接下来,我将按照这些操作对Moment.js中的Doc进行整理分类,方便学习和日后的查阅。

moment.js是一款转换时间的插件
安装方式为:

npm install moment --save
其常用的格式化参数如下表所示:
格式代码 说明 返回值例子
M 数字表示的月份,没有前导零 1到12
MM 数字表示的月份,有前导零 01到12
MMM 三个字母缩写表示的月份 Jan到Dec
MMMM 月份,完整的文本格式 January到December
Q 季度 1到4
D 月份中的第几天,没有前导零 1到31
DD 月份中的第几天,有前导零 01到31
d 星期中的第几天,数字表示 0到6,0表示周日,6表示周六
ddd 三个字母表示星期中的第几天 Sun到Sat
dddd 星期几,完整的星期文本 从Sunday到Saturday
w 年份中的第几周 如42:表示第42周
YYYY 四位数字完整表示的年份 如:2014 或 2000
YY 两位数字表示的年份 如:14 或 98
A 大写的AM PM AM PM
a 小写的am pm am pm
HH 小时,24小时制,有前导零 00到23
H 小时,24小时制,无前导零 0到23
hh 小时,12小时制,有前导零 00到12
h 小时,12小时制,无前导零 0到12
m 没有前导零的分钟数 0到59
mm 有前导零的分钟数 00到59
s 没有前导零的秒数 1到59
ss 有前导零的描述 01到59
X Unix时间戳 1411572969
常用的转换
1.时间格式化
moment().format('YYYY-MM-DD HH:mm:ss');获取当前时间 2018-09-18 12:06:09

moment().format('L') 2018-07-04

moment().format('LL') 2018年7月4日

moment().format('LLL') 2018年7月4日晚上5点55分

moment().format('LLLL') 2018年7月4日星期三晚上5点55分

moment().format('X'); 转换当前时间的Unix时间戳

moment().format('d'); 今天是周几
2.日期格式化
moment().format('dddd') 星期三

moment().format('MMM Do YY') 7月4日 18

moment().format() 2018-07-04T18:04:52+08:00
3.日历格式化
moment().subtract(1,'days').calendar();昨天下午5点55分
moment.calendar();今天下午5点55分
moment().add(1,'days').calendar();明天下午5点55分
4.时间戳转为时间
(1)时间戳秒转时间

moment(Number);
(2)时间戳毫秒转时间

var day = moment.unix(1318781876);
5.时间差转化为相对的秒、分钟或者小时
这里的stopTime和 startTime为开始和结束的日期格式,需要将时间差转化为秒或者分钟,再进行逻辑判断。

let consumingSeconds = moment.duration(moment(stopTime).valueOf()- moment(startTime).valueOf()).as('seconds');
let consumingMinutes = moment.duration(moment(stopTime).valueOf()- moment(startTime).valueOf()).as('minutes');
let consumingHours = moment.duration(moment(stopTime).valueOf()- moment(startTime).valueOf()).as('hours');

获取时间

Start of Time

moment().startOf(String)

获取今天0时0分0秒

moment().startOf('day')

获取本周第一天(周日)0时0分0秒

moment().startOf('week')

获取本周周一0时0分0秒

moment().startOf('isoWeek')

获取当前月第一天0时0分0秒

moment().startOf('month')

End of Time

moment().endOf(String)

获取今天23时59分59秒

moment().endOf('day')

获取本周最后一天(周六)23时59分59秒

moment().endOf('week')

获取本周周日23时59分59秒

moment().endOf('isoWeek')

获取当前月最后一天23时59分59秒

moment().endOf('month')

Days in Month

moment().daysInMonth()

获取当前月的总天数

moment().daysInMonth()

Timestamp

获取时间戳(以秒为单位)

moment().format('X') // 返回值为字符串类型
moment().unix() // 返回值为数值型

获取时间戳(以毫秒为单位)

moment().format('x') // 返回值为字符串类型
moment().valueOf() // 返回值为数值型

Get Time

获取年份

moment().year()
moment().get('year')

获取月份

moment().month() (0~11, 0: January, 11: December)
moment().get('month')

获取一个月中的某一天

moment().date() moment().get('date')

获取一个星期中的某一天

moment().day() (0~6, 0: Sunday, 6: Saturday)
moment().weekday() (0~6, 0: Sunday, 6: Saturday)
moment().isoWeekday() (1~7, 1: Monday, 7: Sunday)
moment().get('day')
mment().get('weekday')
moment().get('isoWeekday')

获取小时

moment().hours() moment().get('hours')

获取分钟

moment().minutes() moment().get('minutes')

获取秒数

moment().seconds() moment().get('seconds')

获取当前的年月日时分秒

moment().toArray() // [years, months, date, hours, minutes, seconds, milliseconds]
moment().toObject() // {years: xxxx, months: x, date: xx ...}

设置时间

Set Time

moment().year(Number), moment().month(Number)...
moment().set(String, Int)
moment().set(Object)

设置年份

moment().year(2019)
moment().set('year', 2019)
moment().set({year: 2019})

设置月份

moment().month(11) (0~11, 0: January, 11: December)
moment().set('month', 11)

设置某个月中的某一天

moment().date(15)
moment().set('date', 15)

设置某个星期中的某一天

moment().weekday(0) // 设置日期为本周第一天(周日)
moment().isoWeekday(1) // 设置日期为本周周一
moment().set('weekday', 0)
moment().set('isoWeekday', 1)

设置小时

moment().hours(12)
moment().set('hours', 12)

设置分钟

moment().minutes(30)
moment().set('minutes', 30)

设置秒数

moment().seconds(30)
moment().set('seconds', 30)

Add Time

moment().add(Number, String)
moment().add(Object)

设置年份

moment().add(1, 'years')
moment().add({years: 1})

设置月份

moment().add(1, 'months')

设置日期

moment().add(1, 'days')

设置星期

moment().add(1, 'weeks')

设置小时

moment().add(1, 'hours')

设置分钟

moment().add(1, 'minutes')

设置秒数

moment().add(1, 'seconds')

Subtract Time

moment().subtract(Number, String)
moment().subtract(Object)

设置年份

moment().subtract(1, 'years')
moment().subtract({years: 1})

设置月份

moment().subtract(1, 'months')

设置日期

moment().subtract(1, 'days')

设置星期

moment().subtract(1, 'weeks')

设置小时

moment().subtract(1, 'hours')

设置分钟

moment().subtract(1, 'minutes')

设置秒数

moment().subtract(1, 'seconds')

格式化时间

Format Time

moment().format()
moment().format(String)

格式化年月日: 'xxxx年xx月xx日'

moment().format('YYYY年MM月DD日')

格式化年月日: 'xxxx-xx-xx'

moment().format('YYYY-MM-DD')

格式化时分秒(24小时制): 'xx时xx分xx秒'

moment().format('HH时mm分ss秒')

格式化时分秒(12小时制):'xx:xx:xx am/pm'

moment().format('hh:mm:ss a')

格式化时间戳(以秒为单位)

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

格式化时间戳(以毫秒为单位)

moment().format('x') // 返回值为字符串类型

比较时间

Difference

moment().diff(Moment|String|Number|Date|Array)

获取两个日期之间的时间差

let start_date = moment().subtract(1, 'weeks')
let end_date = moment()

end_date.diff(start_date) // 返回毫秒数

end_date.diff(start_date, 'months') // 0
end_date.diff(start_date, 'weeks') // 1
end_date.diff(start_date, 'days') // 7
start_date.diff(end_date, 'days') // -7

转化为JavaScript原生Date对象

moment().toDate()
new Date(moment())

将Moment时间转换为JavaScript原生Date对象

let m = moment()
let nativeDate1 = m.toDate()
let nativeDate2 = new Date(m)

String(nativeDate1) === String(nativeDate2) // true

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

推荐阅读更多精彩内容