Fork me on GitHub

使用moment.js轻松管理日期和时间

前言

  • moment.js是一个非常好用的时间处理插件,对js中的date对象进行了一层封装,使之具有更加强大日期处理能力。
  • moment.js里面包含了非常多而且有用的对时间进行操作的方法,例如:时间加减法、比较大小/差值计算、isBefore/isAfter,还支持非常多的时间格式及语言。

moment.js

  • Momentjs支持多个环境,既可以在浏览器中使用,也可以脱离浏览器的环境在nodejs中使用
node
  • 在Node.js中使用momentjs的话需要安装moment模块,然后加载模块就行了。命令如下:
    1
    2
    3
    npm install moment 
    var moment = require('moment');
    moment().format();
浏览器
  • 在浏览器中使用,则用下面方法引入momentjs文件即可,使用的时候在Node.js和浏览器中并没有什么区别。
    1
    2
    3
    4
    <script src="moment.js"></script>
    <script>
    moment().format();
    </script>

常用方法

日期格式化
  • 当前时间:

    1
    moment().format('YYYY-MM-DD HH:mm:ss'); // 2018-06-14 23:36:09
  • 今天是星期几:

    1
    moment().format('d'); // 4
  • 转换当前时间的Unix时间戳:

    1
    moment().format('X');
字符串转日期
  • 代码示例:
    1
    2
    moment('2018-06-14').toDate();
    moment('2018-06-14 10:20:15').toDate();
时间戳转日期
  • 代码示例:
    1
    moment(1448896064621).toDate();
相对时间
  • 时间加减:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    moment().add(7, 'years');       // 加7年
    moment().add(7, 'month'); // 加7个月
    moment().add(7, 'days'); // 加7天
    moment().add(7, 'hours'); // 加7小时
    moment().add(7, 'minutes'); // 加7分钟
    moment().add(7, 'seconds'); // 加7秒钟

    moment().subtract(7, 'years'); // 减7年
    moment().subtract(7, 'month'); // 减7个月
    moment().subtract(7, 'days'); // 减7天
    moment().subtract(7, 'hours'); // 减7小时
    moment().subtract(7, 'minutes');// 减7分钟
    moment().subtract(7, 'seconds');// 减7秒钟

    moment().subtract(7, 'days').format('YYYY年MM月DD日'); // 7天前的日期
    moment().add(7, 'days').format('YYYY年MM月DD日'); // 7天后的日期
    moment().subtract(7, 'hours').format('HH:mm:ss'); // 7小时前的时间
    moment().add(7, 'hours').format('HH:mm:ss'); // 7小时后的时间
  • moment.js的函数支持链式写法

    1
    moment().add(7, 'days').add(1, 'months');
  • 20160601相对当前日期是2年前:

    1
    moment("20160601", "YYYYMMDD").fromNow(); // 2 years ago

常用格式

  • moment.js提供了丰富的说明文档,使用它还可以创建日历项目等复杂的日期时间应用。
  • 在日常开发中最常用的是格式化时间,下面将常用的格式制作成表格说明:
格式代码 说明 返回值例子
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
H 小时,24小时制,无前导零 0到23
HH 小时,24小时制,有前导零 00到23
h 小时,12小时制,无前导零 0到12
hh 小时,12小时制,有前导零 00到12
m 没有前导零的分钟数 0到59
mm 有前导零的分钟数 00到59
s 没有前导零的秒数 0到59
ss 有前导零的描述 00到59
X Unix时间戳 1411572969

写法示例

创建
1
2
3
4
5
6
moment() // 当前时间
moment("1995-12-25") // 1995-12-25
moment("12-25-1995", "MM-DD-YYYY") // 1995-12-25
moment({ year :2010, month :3, day :5, hour :15, minute :10, second :3, millisecond :123})
moment(Date.now() - 24 * 60 * 60 * 1000) // 昨天
moment(new Date(2011, 9, 16)) // 2011-10-16
格式化
1
2
3
moment().format('YYYY年MM月DD日 HH:mm:ss') // 2016年11月11日 22:05:19
moment().format('hh:m:ss') // 10:5:19
moment().format('[YYYY]') // "YYYY"。[] 里的会原样输出。
转化成 Date 对象
1
moment().toDate()
获取/设置时间信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
moment().second() //获得 秒
moment().second(Number) //设置 秒。0 到 59
moment().minute() //获得 分
moment().minute(Number) //设置 分。0 到 59
// 类似的用法
moment().hour() // 小时
moment().date() // 一个月里的第几天
moment().day() // 星期几
moment().dayOfYear() // 一年里的第几天
moment().week() // 一年里的第几周
moment().month() // 第几个月
moment().quarter() // 一年里的第几个季度
moment().year() // 年
moment().daysInMonth() // 当前月有多少天
操作
1
2
3
4
5
6
7
8
9
moment().add(7, 'days') // 之后的第7天。第2个参数还可以是 'months', 'years' 等。注意是复数。
moment().add(7, 'd')// 与上面一行代码的运行结果一样。
moment().subtract(1, 'months') // 上个月

moment().startOf('week') // 这周的第一天
moment().startOf('hour') // 与 moment().minutes(0).seconds(0).milliseconds(0)等效。
// 还支持 'year''month'

moment().endOf('week') // 这周的最后一天
查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 早于
moment('2010-10-20').isBefore('2010-10-21') // true
moment('2010-10-20').isBefore('2010-12-31', 'year') // false
moment('2010-10-20').isBefore('2011-01-01', 'year') // true

// 是否相等
moment('2010-10-20').isSame('2010-10-20') // true
moment('2010-10-20').isSame('2009-12-31', 'year') // false
moment('2010-10-20').isSame('2010-01-01', 'year') // true

// 晚于
moment('2010-10-20').isAfter('2010-10-19') // true
moment('2010-10-20').isAfter('2010-01-01', 'year') // false
moment('2010-10-20').isAfter('2009-12-31', 'year') // true

// 是否在时间范围内
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25') // true
moment('2010-10-20').isBetween('2010-01-01', '2012-01-01', 'year') // false
moment('2010-10-20').isBetween('2009-12-31', '2012-01-01', 'year') // true

moment().isLeapYear() // 是否是闰年
------ 本文结束 ------