moment 时间日期处理库 解析部分

moment

官方api

1. 安装导入

1.1 安装

npm install moment -g # 全局安装
npm install moment # 安装

1.2 导入

//require 方式
var moment=require('moment');
//import 方式
import moment from 'moment';

1.3 设定moment区域为中国

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

1.3 格式化

格式化参数对照表:

格式代码说明返回值例子
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 PMAM PM
a小写的am pmam 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
XUnix时间戳1411572969
//当前日期格式化 
moment().format('MMMM Do YYYY, h:mm:ss a'); -> 四月 62015, 3:55:57 下午 
moment().format('dddd'); -> 星期一 
moment().format("MMM Do YY"); -> 4615 
moment().format('YYYY [escaped] YYYY'); -> 2015 escaped 2015 
moment().format(); -> 2015-04-06T15:55:57+08:00 
moment().format('YYYY-MM-DD'); -> 2015-04-06 
moment().format('YYYY-MM-DD h:mm:ss a'); -> 2015-04-06 03:55:57 下午 
//指定日期格式化 
moment("20111031", "YYYYMMDD").fromNow(); -> 3年前 
moment("20120620", "YYYYMMDD").fromNow(); -> 3年前 
moment().startOf('day').fromNow(); -> 16小时前 
moment().endOf('day').fromNow(); -> 8小时内 
moment().startOf('hour').fromNow(); -> 1小时前 
//当前日期向前或者向后推的日期格式化 
moment().subtract(10, 'days').calendar(); -> 2015327moment().subtract(6, 'days').calendar(); -> 上周二下午355 
moment().subtract(3, 'days').calendar(); -> 上周五下午355 
moment().subtract(1, 'days').calendar(); -> 昨天下午355 
moment().calendar(); -> 今天下午355 
moment().add(1, 'days').calendar(); -> 明天下午355 
moment().add(3, 'days').calendar(); -> 本周四下午355 
moment().add(10, 'days').calendar(); -> 2015416//也可以使用下面方式日期格式化 
moment().format('L'); -> 2015-04-06 
moment().format('l'); -> 2015-04-06 
moment().format('LL'); -> 201546moment().format('ll'); -> 201546moment().format('LLL'); -> 201546日下午355 
moment().format('lll'); -> 201546日下午355 
moment().format('LLLL'); -> 201546日星期一下午355 
moment().format('llll'); -> 201546日星期一下午355

1.4 解析

1.4.1 当前时间
var now = moment();
或者
var now = moment(new Date())
1.4.2 字符串解析时间
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
1.4.3 字符串+格式 创建对象
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");

年月日对照表:

格式代码说明返回值例子
YYYY4或2位数年份2014
YY2位数年份14
Q一年四分之一。将季度设置为季度的第一个月1…4
M MM月份编号1…12
MMM MMMM设置的语言环境中的月份名称 moment.locale()Jan…December
D DD一个月的一天1…31
Do有序的月份日1st…31st
DDD DDDD1…365一年中的一天
XUnix时间戳1410715640.579
xUnix ms时间戳1410715640579

周年,周和工作日对照表

格式代码说明返回值例子
ggggLocale 4位数周2014
ggLocale 2位数周14
w ww一年中的第几周1…53
e一周中的星期几1…7
ddd dddd设置的语言环境中的日期名称 moment.locale()Mon…Sunday
GGGGISO 4位数周2014
GGISO 2位数周14
W WWISO周一年1…53
EISO星期几1…7

小时,分钟,秒,毫秒对照表

格式代码说明返回值例子
H HH24小时的时间0…23
hh小时,12小时制,有前导零00到12
h小时,12小时制,无前导零0到12
A大写的AM PMAM PM
a小写的am pmam pm
m没有前导零的分钟数0到59
mm有前导零的分钟数00到59
s没有前导零的秒数1到59
ss有前导零的描述01到59
S十分之一秒0…9
SS几百秒0…99
SSS千分之一秒0…999
SSSS小秒0000…9999
Z ZZ从UTC偏移量±HH:mm,±HHmm或Z+12:00
//除非您指定时区偏移量,否则解析字符串将在当前时区中创建日期
moment("2010-10-20 4:30",       "YYYY-MM-DD HH:mm");   // parsed as 4:30 local time
moment("2010-10-20 4:30 +0000", "YYYY-MM-DD HH:mm Z"); // parsed as 4:30 UTC
//如果由解析的输入产生的时刻不存在,moment#isValid则返回false
moment("2010 13",           "YYYY MM").isValid();     // false (not a real month)
moment("2010 11 31",        "YYYY MM DD").isValid();  // false (not a real day)
moment("2010 2 29",         "YYYY MM DD").isValid();  // false (not a leap year)
moment("2010 notamonth 29", "YYYY MMM DD").isValid(); // false (not a real month name)
//可以将区域设置键作为第三个参数传递给moment()和moment.utc()
moment('2012 juillet', 'YYYY MMM', 'fr');
moment('2012 July',    'YYYY MMM', 'en');
//可以为最后一个参数指定一个布尔值,以使Moment使用严格的解析。严格的解析要求格式和输入完全匹配
moment('It is 2012-05-25', 'YYYY-MM-DD').isValid();       // true
moment('It is 2012-05-25', 'YYYY-MM-DD', true).isValid(); // false
moment('2012-05-25',       'YYYY-MM-DD', true).isValid(); // true

//解析两位数年份
//默认情况下,假设高于68的两位数年份在1900年,而68年或以下的年份假定为2000年。
//可以通过替换moment.parseTwoDigitYear方法来更改此设置
1.4.4 多时间格式解析

如果您不知道输入字符串的确切格式,但知道它可能是众多格式之一,则可以使用一组格式

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

注意:解析多种格式比解析单一格式要慢得多。如果可以避免它,解析单个格式要快得多

1.4.5 字符串的特殊时间格式
moment(String, moment.CUSTOM_FORMAT, [String], [Boolean]);
moment(String, [..., moment.ISO_8601, ...], [String], [Boolean]);

moment("2010-01-01T05:06:07", moment.ISO_8601);
moment("2010-01-01T05:06:07", ["YYYY", moment.ISO_8601]);
1.4.6 创建对象
moment({unit: value, ...});
moment({ hour:15, minute:10 });
moment({ y    :2010, M     :3, d   :5, h    :15, m      :10, s      :3, ms          :123});
moment({ year :2010, month :3, day :5, hour :15, minute :10, second :3, millisecond :123});
moment({ years:2010, months:3, days:5, hours:15, minutes:10, seconds:3, milliseconds:123});
moment({ years:2010, months:3, date:5, hours:15, minutes:10, seconds:3, milliseconds:123});
//day并且date键都表示每月的日期
//moment(Array)和new Date(year, month, date),月份是0索引
1.4.7 unix 迁移量
moment(Number);
var day = moment(1318781876406);
//与之类似new Date(Number),您可以通过传递一个整数值来创建片刻,
//该整数值表示自Unix Epoch(1970年1月1日12 AM UTC)以来的毫秒数
1.4.8 unix 时间戳
moment.unix(Number)
//要从Unix时间戳(自Unix Epoch以来的秒数)创建时刻,请使用moment.unix(Number)
var day = moment.unix(1318781876);
//实现为moment(timestamp * 1000),因此包括输入时间戳中的部分秒
var day = moment.unix(1318781876.721);
1.4.9 日期对象
moment(Date);
//可以Moment使用预先存在的本机Javascript Date对象创建一个
var day = new Date(2011, 9, 16);
var dayWrapper = moment(day);
//这个克隆Date对象; 进一步改变Date不会影响Moment,反之亦然
1.4.10 数组
moment(Number[]);
//可以使用一组数字创建一个时刻,这些数字镜像传递给新Date()的参数
[year, month, day, hour, minute, second, millisecond]
moment([2010, 1, 14, 15, 25, 50, 125]); // February 14th, 3:25:50.125 PM
//超过一年的任何值都是可选的,并且将默认为最低可能的数字
moment([2010]);        // January 1st
moment([2010, 6]);     // July 1st
moment([2010, 6, 10]); // July 10th
//使用数组构造将在当前时区中创建日期。要从UTC中的数组创建日期,请使用moment.utc(Number[])
moment.utc([2010, 1, 14, 15, 25, 50, 125]);

moment([2010, 13]).isValid();     // false (not a real month)
moment([2010, 10, 31]).isValid(); // false (not a real day)
moment([2010, 1, 29]).isValid();  // false (not a leap year)
1.4.11 复制
moment(Moment);
//所有的时刻都是可变的。如果你想要克隆片刻,你可以明确地或隐含地这样做
var a = moment([2012]);
var b = moment(a);
a.year(2000);
b.year(); // 2012

//此外,您可以打电话moment#clone克隆片刻
var a = moment([2012]);
var b = a.clone();
a.year(2000);
b.year(); // 2012
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值