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 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 |
//当前日期格式化
moment().format('MMMM Do YYYY, h:mm:ss a'); -> 四月 6日 2015, 3:55:57 下午
moment().format('dddd'); -> 星期一
moment().format("MMM Do YY"); -> 4月 6日 15
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(); -> 2015年3月27日
moment().subtract(6, 'days').calendar(); -> 上周二下午3点55
moment().subtract(3, 'days').calendar(); -> 上周五下午3点55
moment().subtract(1, 'days').calendar(); -> 昨天下午3点55
moment().calendar(); -> 今天下午3点55
moment().add(1, 'days').calendar(); -> 明天下午3点55
moment().add(3, 'days').calendar(); -> 本周四下午3点55
moment().add(10, 'days').calendar(); -> 2015年4月16日
//也可以使用下面方式日期格式化
moment().format('L'); -> 2015-04-06
moment().format('l'); -> 2015-04-06
moment().format('LL'); -> 2015年4月6日
moment().format('ll'); -> 2015年4月6日
moment().format('LLL'); -> 2015年4月6日下午3点55
moment().format('lll'); -> 2015年4月6日下午3点55
moment().format('LLLL'); -> 2015年4月6日星期一下午3点55
moment().format('llll'); -> 2015年4月6日星期一下午3点55
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");
年月日对照表:
格式代码 | 说明 | 返回值例子 |
---|---|---|
YYYY | 4或2位数年份 | 2014 |
YY | 2位数年份 | 14 |
Q | 一年四分之一。将季度设置为季度的第一个月 | 1…4 |
M MM | 月份编号 | 1…12 |
MMM MMMM | 设置的语言环境中的月份名称 moment.locale() | Jan…December |
D DD | 一个月的一天 | 1…31 |
Do | 有序的月份日 | 1st…31st |
DDD DDDD | 1…365 | 一年中的一天 |
X | Unix时间戳 | 1410715640.579 |
x | Unix ms时间戳 | 1410715640579 |
周年,周和工作日对照表
格式代码 | 说明 | 返回值例子 |
---|---|---|
gggg | Locale 4位数周 | 2014 |
gg | Locale 2位数周 | 14 |
w ww | 一年中的第几周 | 1…53 |
e | 一周中的星期几 | 1…7 |
ddd dddd | 设置的语言环境中的日期名称 moment.locale() | Mon…Sunday |
GGGG | ISO 4位数周 | 2014 |
GG | ISO 2位数周 | 14 |
W WW | ISO周一年 | 1…53 |
E | ISO星期几 | 1…7 |
小时,分钟,秒,毫秒对照表
格式代码 | 说明 | 返回值例子 |
---|---|---|
H HH | 24小时的时间 | 0…23 |
hh | 小时,12小时制,有前导零 | 00到12 |
h | 小时,12小时制,无前导零 | 0到12 |
A | 大写的AM PM | AM PM |
a | 小写的am pm | am 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
moment 时间日期处理库 解析部分相关推荐
- Day.js轻量级 JavaScript 时间日期处理库可替代Moment.js
Day.js 是一个仅 2kb 大小的轻量级 JavaScript 时间日期处理库,和 Moment.js 的 API 设计保持完全一样.如果你曾经用过 Moment.js ,那么你已经知道如何使用 ...
- Day.js 一个轻量级的 JavaScript 时间日期处理库
在项目中难免要去处理时间和日期,所以就一定会用到 Moment.js ,Moment.js 是一个大而全的 JS 时间库,使得我们处理时间和日期变得简便,但是 Moment.js 太重了(大约 200 ...
- vue中使用day.js(时间日期处理库)
安装:npm install dayjs --save 引入: var dayjs = require('dayjs') //commonjs //import dayjs from 'dayjs' ...
- Android实时显示时间日期(极简)
Android实时显示时间日期 示例图 示例图解析 TextClock时间控件 常用的xml属性及常用方法 示例源代码 .xml文件 .java 示例图 示例图解析 格式 说明 yyyy/MM/dd ...
- Java 8中的时间日期库DateTime API及示例
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理 ...
- sqlserver获取前一天的日期_Java8新特性时间日期库DateTime API及示例
点击上方蓝字关注「程序新视界」 Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理.同样的,如果你现在依旧在项目中使用传统Date.Calendar和Simp ...
- java instant获取微秒转成日期格式_Java8新特性时间日期库DateTime API及示例
点击上方蓝字关注「程序新视界」 Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理.同样的,如果你现在依旧在项目中使用传统Date.Calendar和Simp ...
- Java 8 时间日期库的20个使用演示样例
除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...
- java system datetime_Java8新特性时间日期库DateTime API及示例
Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理.同样的,如果你现在依旧在项目中使用传统Date.Calendar和SimpleDateFormat等API ...
最新文章
- 【iOS开发】企业版证书($299)In-House方式发布指南 (转)
- 第三次组队赛 (DFSBFS)
- 交叉编译inetutils并配置telnet服务
- hdu 1892二维树状数组
- getParameterValues用法
- 异步解耦_如何使用异步生成器解耦业务逻辑
- android 360自动更新,解决Android百度自动更新SDK和360自动更新SDK兼容
- 面试准备——Java回顾:基础编程(基本语法、面向对象、异常处理)
- ue4蓝图碰撞检测的类型_UE4_自定义相机碰撞组件
- 如果出现网络请求3840的这种错误
- 幅值与峰峰值的计算_正弦波的幅度指的是峰值还是峰峰值
- JVM-深入理解JVM内存模型、类加载机制、内存分配机制
- 第一章 SQL中使用的符号
- Java游戏服务器系列:传统的BIO(OIO)、NIO与Netty中的BIO(OIO)、NIO
- 旅游业如何使用数据分析?
- 21_ue4进阶末日生存游戏开发[行为树]
- pcm5102a解码芯片音质评测_airpods超强平替,新品JEET ONE蓝牙耳机开箱评测!
- C++画图之GOC编程 第6课 通天云梯
- 票务公司网上订票系统
- TMC5240AUU+高性能步进电机控制器-加减速规划运动控制芯片
热门文章
- 苹果手机打电话没有声音怎么回事_网页看视频没有声音怎么回事?
- 小米机顶盒显示网络无法连接服务器,小米盒子无线网络连接不上怎么回事 - 卡饭网...
- 计算机顶会:投稿时间 会议介绍
- 数字校园APP开发与应用
- android分享视频到微信,android 分享文本、图片、音乐、视频到微信朋友圈、好友、我的收藏...
- ipfs 存储目录结构
- iOS_3DTouch使用
- 腾讯云点播视频存储(Web端视频上传)
- 从k8s.gcr.io拉取镜像
- 人生无捷径「一万小时定律·正篇」