模块开发之时间/日期组件moment.js使用(十四)
文章目錄
- 前言
- 基本使用
-
- moment與字符串想到轉換
- 當前時間
- 語法
-
- 創建moment實例的方式
-
- 時間字符串+指定格式
- 時間字符串+多定格式
- moment完全支持iso-8601格式字符串
- 以對象形勢創建,這很重要
- 傳入date對象
- 接收數組
-
- moment默認值
-
- 不傳任何參數即是當前時間
- 怎樣的默認值
- 對moment時間的操作
-
- get/set方法
- 時間的加減操作
-
- 加法
- 減法
- 指定格式的開始時間和結束時間
- 兩個moment的比較
- moment比較大小
- ISO 8601時間以及時間里T和Z了解
- 格式化
-
- moment幫我們設置了一些長日期格式
模塊開發之時間/日期組件moment.js使用(十四)
前言
moment.js框架是我見過的處理日期和時間最好的工具,再也不用自己寫個類處理日期格式了,放棄Date和calendar的處理吧
基本使用
moment與字符串想到轉換
一個基本的使用方式也是常用的方式是怎么把日期字符串轉成moment方式,同時將moment對象顯示成我們想要的方式
比如
const moment = require('moment')
//字符串轉換成moment
let a = moment("2018-08-29 12:13:14", "YYYY-MM-DD hh:mm:ss")
//moment轉換成字符串
console.log(a.format("YYYY-MM-DD hh:mm:ss"))
這是基本使用方式.
let a = moment(“2018-08-29 12:13:14”, “YYYY-MM-DD hh:mm:ss”):moment()構造函數第一個參數是時間日期,第二個參數是傳入的時間日期的格式,方便moment解析。
a.format(“YYYY-MM-DD hh:mm:ss”):是將moment實例以我們想格式化的形勢展示,"YYYY-MM-DD hh:mm:ss"這個即是展示形勢。當然我們可以組合很多種。后面會講到。
當前時間
不傳任何參數即表示當前時間。如下
let a = moment()
console.log(a.format("YYYY-MM-DD hh:mm:ss"))
輸出:2018-09-20 02:03:12
語法
創建moment實例的方式
時間字符串+指定格式
語法
moment(String, String);//時間,格式
moment(String, String, String);//時間,格式
moment(String, String, Boolean);//時間,格式,嚴格模式
moment(String, String, String, Boolean);//時間,格式,國際化(比如“zh-cn”)嚴格模式
例子
const moment = require('moment')
let a = moment("2018-09-05","YYYYMMDD")
console.log(a.format("YYYYMMDD hh:mm:ss"))
輸出:20180905 12:00:00
const moment = require('moment')
let a = moment("2018-09-05","YYYY-MM-DD")
console.log(a.format("YYYYMMDD hh:mm:ss"))
輸出:20180905 12:00:00
moment在解析時遇到字符串里的非字母和數字時,默認忽略不解析,所以YYYYMMDD和"YYYY-MM-DD"是一樣效果
const moment = require('moment')
let a = moment("05","DD")
console.log(a.format("YYYYMMDD hh:mm:ss"))
輸出:20180905 12:00:00
時間字符串+多定格式
如果我們不知道傳入的時間字符串是什么格式,但肯定知道是其中一種,我們所以用數組指定格式。
const moment = require('moment')
let a = moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"],"zh-cn",true);
console.log(a.format("YYYYMMDD hh:mm:ssa"))
輸出:19951225 12:00:00凌晨
moment完全支持iso-8601格式字符串
比如
moment("2010-01-01T05:06:07", moment.ISO_8601);moment("2010-01-01T05:06:07", ["YYYY", moment.ISO_8601]);
以對象形勢創建,這很重要
例如
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里y,year,years是等價的,所以傳任何一種都可以。同時d,day,days一樣,其它亦是如此
這里會涉及到默認值情況,比如我們只傳hour或day會怎樣。
傳入date對象
var day = new Date(2011, 9, 16);
var dayWrapper = moment(day);
console.log(dayWrapper.format("YYYYMMDD hh:mm:ssa"))//輸出20111016 12:00:00am
這樣我們就可以將Date轉換成moment對象了
接收數組
這種方式不靈活,必需按年月日順序組織數組,幾乎不用,貼個例子
moment([2010, 6, 10]);
moment默認值
不傳任何參數即是當前時間
moment();
怎樣的默認值
以2018-09-20 10:10:10:123為例
如果只傳hour,那么時間的左邊會是當前時間年月時,hour右邊的則默認是0
let a = moment("10", "hh");
console.log(a.format("YYYYMMDD hh:mm:ssa"))//輸出20180920 10:00:00am
let a = moment("10", "DD");
console.log(a.format("YYYYMMDD hh:mm:ssa"))//20180910 12:00:00am
day的左邊是當前時間的年月,右邊默認是0時間,注意上面的凌晨12點,也就是一天開始時間0點
對moment時間的操作
get/set方法
獲取對象值get方法
const moment = require('moment')
var day = new Date(2011, 9, 16);
var dayWrapper = moment(day);
console.log("y=" + dayWrapper.get('y'))
console.log("year=" + dayWrapper.get('year'))
console.log("years=" + dayWrapper.get('years'))
輸出
y=2011 year=2011 years=2011
對應的set方法為
const moment = require('moment')
var day = new Date(2011, 9, 16);
var dayWrapper = moment(day);
dayWrapper.set('y',2012)
//dayWrapper.get('year',2012)
//dayWrapper.get('years',2012)
console.log("resutl:" + dayWrapper.format("YYYY-MM-DD hh:mm:ss:ms"))
輸出結果:resutl:2012-10-16 12:00:00:00
其它的簡寫如下
| 字符 | 描述 |
|---|---|
| y/year/years | 年 |
| M/month/months | 月 |
| d/day/days | 日 |
| h/hour/hours | 時 |
| m/minute/minutes | 分 |
| s/second/seconds | 秒 |
| ms/millisecond/milliseconds | 毫秒 |
| w/week/weeks | 周 |
| Q/quarter/quarters | 季度 |
時間的加減操作
加法
語法
moment().add(Number, String);
moment().add(Duration);//持續時間
moment().add(Object);
這個很簡單,對應三個例子
moment().add(7, 'days').add(1, 'months');
moment().add({days:7,months:1});
moment([2012, 0, 31]).add(moment.duration({'days' : 1}));
當前如果將值變成負數則和減法功能一樣的。
減法
和加法是對應的,語法
moment().subtract(Number, String);
moment().subtract(Duration);
moment().subtract(Object);
例子
moment().subtract(7, 'days');
moment().subtract({days:7,months:1});
moment([2012, 0, 31]).subtract(moment.duration({'days' : 1}));
指定格式的開始時間和結束時間
moment().startOf(String):修改了moment實例的時間,指向開始
moment().endOf(String):修改了moment實例的時間,指向結束
var str = "YYYY-MM-DD hh:mm:ms"
var a = moment("2019-2-20 13:13:13",str)
console.log("本月開始日期" + a.startOf("M").format(str))
輸出:
本月開始日期2019-02-01 12:00:00
本月結束日期2019-02-28 11:59:59
兩個moment的比較
不僅僅限于moment的比較,其它格式同樣適合
- 最大值:
moment().max(Moment|String|Number|Date|Array); - 最小值:
moment().min(Moment|String|Number|Date|Array);
moment比較大小
moment().isBefore(Moment|String|Number|Date|Array):是否之前
moment().isSame(Moment|String|Number|Date|Array):是否相同
moment().isAfter(Moment|String|Number|Date|Array):是否之后
moment().isBetween(moment-like, moment-like):是否之間
參考官司網查詢
ISO 8601時間以及時間里T和Z了解
具體對UTC的了解可百度一下ISO 8601 ,北京時間比較ISO 8601時間要快,也就是說ISO 8601時間+8houre=北京時間
T是日期和時間之間的特殊字符,功能和空格一樣,起分隔作用。比如
2018-09-28T01:52:35和2018-09-28 01:52:35是等價功能。
Z表示時間是ISO 8601格式時間
比如:
var a2 = moment("2018-09-28T14:52:35Z")
console.log("a2:" + a2.format())
輸出a2:2018-09-28T22:52:35+08:00
他ISO 8601時間+8houre=北京時間公式一樣,當前時間其實是2018-09-28 22:52:35,字符串后面+08:00``是ISO 8601時間偏移量即8小時。
對比如下
ISO 8601格式如下:2018-09-28T14:52:35Z
中國標準時間(UTC時間):a2:2018-09-28T22:52:35+08:00
格式化
重量及選手,為什么"YYYY-MM-DD HH:mm:ss"就能展示2018-09-28 14:52:35呢
| 縮寫 | 輸出結果 |
|---|---|
| Month | M |
| Mo | |
| MM | |
| MMM | |
| MMMM | |
| Quarter | Q |
| Day of Month | D |
| Do | |
| DD | |
| Day of Year | DDD |
| DDDo | |
| DDDD | |
| Day of Week | d |
| do | |
| dd | |
| ddd | |
| dddd | |
| Day of Week (Locale) | e |
| Day of Week (ISO) | E 1 2 … 6 7 |
| Week of Year | w |
| wo | |
| ww | |
| Week of Year (ISO) | W |
| Wo | |
| WW | |
| Year | YY |
| YYYY | |
| Week Year | gg 70 71 … 29 30 |
| gggg | |
| Week Year (ISO) | GG |
| GGGG | |
| AM/PM | A |
| a | |
| Hour | H |
| HH | |
| h | |
| hh | |
| Minute | m |
| mm | |
| Second | s |
| ss | |
| Fractional Second | S |
| SS | |
| SSS | |
| SSSS … SSSSSSSSS | |
| Z | -07:00 -06:00 … +06:00 +07:00 |
| Unix Timestamp | X |
| Unix Millisecond Timestamp | x 1360013296123 |
moment幫我們設置了一些長日期格式
| 縮寫 | 組合 |
|---|---|
| LT | h:mm A |
| LTS | h:mm:ss A |
| L | MM/DD/YYYY |
| l | M/D/YYYY |
| LL | MMMM Do YYYY |
| ll | MMM D YYYY |
| LLL | MMMM Do YYYY LT |
| lll | MMM D YYYY LT |
| LLLL | dddd, MMMM Do YYYY LT |
| llll | ddd, MMM D YYYY LT |
效果如下
moment().format('L'); // 2018-09-20
moment().format('l'); // 2018-09-20
moment().format('LL'); // 2018年9月20日
moment().format('ll'); // 2018年9月20日
moment().format('LLL'); // 2018年9月20日下午4點26分
moment().format('lll'); // 2018年9月20日下午4點26分
moment().format('LLLL'); // 2018年9月20日星期四下午4點26分
moment().format('llll'); // 2018年9月20日星期四下午4點26分
#全部設置語言
使用moment.locale(語言)設置,moment().lang(String)在2.8.1被廢棄了
moment.locale('en');
moment.locale('zh-cn');
參考官方能獲得更高知識
中文官網首頁
中文官網文檔
總結
以上是生活随笔為你收集整理的模块开发之时间/日期组件moment.js使用(十四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对象的单数组表示(用单数组实现链表-不一
- 下一篇: 国产厂商京东方被三星电子踢出供应链?官方