node.js使用Moment.js js 時(shí)間計(jì)算方法示例小結(jié)
概述
moment
是一個(gè)使用非常方便的 Node.js 模塊,可以幫助我們處理和格式化日期和時(shí)間。這里就來總結(jié)一下moment的常見用法。
首先是安裝:
npm i moment
其次是引入:
const moment = require('moment'); //common.js 模式 //或者ES6模式: import moment from 'moment'
基本用法
Moment.js中文文檔系列之八時(shí)間段(Durations)
- 創(chuàng)建時(shí)間段:
duration()
- 人性化:
humanize()
- 毫秒:
milliseconds()
- 秒:
seconds()
- 分:
minutes()
- 小時(shí):
hours()
- 天:
days()
- 月:
months()
- 年:
years()
- 增加時(shí)間:
add()
- 減少時(shí)間:
subtract()
- 單位轉(zhuǎn)換:
as()
- 取值:
get()
- 轉(zhuǎn)換為JSON:
toJSON()
- 是否時(shí)間段:
isDuration()
Moment.js
中也有時(shí)間段對象。一個(gè)時(shí)間moment
被定義為一個(gè)單點(diǎn)時(shí)刻,而時(shí)間段被定義為一個(gè)時(shí)間長度。
時(shí)間段沒有定義開始和結(jié)束時(shí)間,它們是一種前后的關(guān)系。一個(gè)時(shí)間段更類似于“2小時(shí)”,而不是“今天下午的2點(diǎn)到4點(diǎn)之間”。
例如,一年可以被定義為366天、365天、365.25天、12個(gè)月或52周。計(jì)算兩個(gè)時(shí)間之間的天或年時(shí),使用moment#diff 比使用Durations
更好。
1. 創(chuàng)建時(shí)間段:duration()
moment.duration(Number, String); moment.duration(Number); moment.duration(Object); moment.duration(String);
創(chuàng)建一個(gè)時(shí)間段,通過moment.duration()
方法并傳入一個(gè)毫秒級的時(shí)間戳。
moment.duration(100); // 100 毫秒
如果你想在創(chuàng)建時(shí)間段時(shí)使用非毫秒級的單位,你可以像這樣傳入時(shí)間單位:
moment.duration(2, 'seconds'); moment.duration(2, 'minutes'); moment.duration(2, 'hours'); moment.duration(2, 'days'); moment.duration(2, 'weeks'); moment.duration(2, 'months'); moment.duration(2, 'years');
在moment#add
和moment#subtract
方法中使用簡寫形式在這兒也同樣適用。
Key | Shorthand |
---|---|
years | y |
months | M |
weeks | w |
days | d |
hours | h |
minutes | m |
seconds | s |
milliseconds | ms |
像moment#add
一樣,你可以按需要傳入一個(gè)包含多個(gè)單位的對象。
moment.duration({ seconds: 2, minutes: 2, hours: 2, days: 2, weeks: 2, months: 2, years: 2 });
格式是一個(gè)以冒號(hào)分隔的時(shí)、分、秒的字符串,如23:59:59
。表示天的數(shù)字,使用點(diǎn)號(hào)分隔,如7.23:59:59
。秒的部分還支持這樣23:59:59.999
。
moment.duration('23:59:59'); moment.duration('23:59:59.999'); moment.duration('7.23:59:59.999'); moment.duration('23:59'); //added in 2.3.0
2. 人性化:humanize()
moment.duration().humanize();
有時(shí),你想像moment#from一樣友好顯示,但不想創(chuàng)建兩個(gè)時(shí)間。
moment.duration(1, "minutes").humanize(); // a minute moment.duration(2, "minutes").humanize(); // 2 minutes moment.duration(24, "hours").humanize(); // a day
默認(rèn),其返回值是無后綴的。如果需要帶后,可以傳一個(gè)參數(shù)。
moment.duration(1, "minutes").humanize(true); // in a minute
如果是相對當(dāng)前時(shí)間的前綴,可以傳入一個(gè)負(fù)數(shù)。
moment.duration(-1, "minutes").humanize(true); // a minute ago
3. 毫秒:milliseconds()
moment.duration().milliseconds(); moment.duration().asMilliseconds();
獲取一個(gè)數(shù)字表示的毫秒數(shù),使用moment.duration().milliseconds()
,其返回是一個(gè)0?999之間的數(shù)字。
moment.duration(500).milliseconds(); // 500 moment.duration(1500).milliseconds(); // 500 moment.duration(15000).milliseconds(); // 0
如果要獲取的是一個(gè)毫秒級的時(shí)間段長度,使用moment.duration().asMilliseconds()
方法代替。
moment.duration(500).asMilliseconds(); // 500 moment.duration(1500).asMilliseconds(); // 1500 moment.duration(15000).asMilliseconds(); // 15000
4. 秒:seconds()
moment.duration().seconds(); moment.duration().asSeconds();
獲取一個(gè)數(shù)字表示的秒數(shù),使用moment.duration().seconds()
,其返回是一個(gè)0?59之間的數(shù)字。
moment.duration(500).seconds(); // 0 moment.duration(1500).seconds(); // 1 moment.duration(15000).seconds(); // 15
如果要獲取的是一個(gè)秒級的時(shí)間段長度,使用moment.duration().asSeconds()
方法代替。
moment.duration(500).asSeconds(); // 0.5 moment.duration(1500).asSeconds(); // 1.5 moment.duration(15000).asSeconds(); // 15
5. 分:minutes()
moment.duration().minutes(); moment.duration().asMinutes();
獲取其它的時(shí)間段,moment.duration().minutes()
可以獲取分鐘數(shù)(0?59),moment.duration().asMinutes()
可以獲取表示分的長度。
6. 小時(shí):hours()
moment.duration().hours(); moment.duration().asHours();
獲取其它的時(shí)間段,moment.duration().hours()
可以獲取小時(shí)數(shù)(0?23),moment.duration().asHours()
可以獲取表示小時(shí)的長度。
7. 天:days()
moment.duration().days(); moment.duration().asDays();
獲取其它的時(shí)間段,moment.duration().days()
可以獲取天數(shù)(0?23),moment.duration().asHours()
可以獲取表示天的長度。
8. 月:months()
moment.duration().months(); moment.duration().asMonths();
獲取其它的時(shí)間段,moment.duration().months()
可以獲取月數(shù)(0?11),moment.duration().asMonths()
可以獲取表示月的長度。
注意:一月的時(shí)間長度被定義為30天。
9. 年:years()
moment.duration().years(); moment.duration().asYears();
獲取其它的時(shí)間段,moment.duration().years()
可以獲取年份,moment.duration().asYears()
可以獲取表示年的長度。
注意:一年的時(shí)間長度被定義為365天。
10. 增加時(shí)間:add()
moment.duration().add(Number, String); moment.duration().add(Number); moment.duration().add(Duration); moment.duration().add(Object);
對原時(shí)間段增加時(shí)間。
在創(chuàng)建時(shí)間段時(shí)使用的簡寫形式的時(shí)間單位,在這里也同樣適用??梢缘诙€(gè)參數(shù)中傳入。
var a = moment.duration(1, 'd'); var b = moment.duration(2, 'd'); a.add(b).days(); // 3
11. 減少時(shí)間:subtract()
moment.duration().subtract(Number, String); moment.duration().subtract(Number); moment.duration().subtract(Duration); moment.duration().subtract(Object);
對原時(shí)間段減少時(shí)間。
在創(chuàng)建時(shí)間段時(shí)使用的簡寫形式的時(shí)間單位,在這里也同樣適用??梢缘诙€(gè)參數(shù)中傳入。
var a = moment.duration(3, 'd'); var b = moment.duration(2, 'd'); a.subtract(b).days(); // 1
12. 單位轉(zhuǎn)換:as()
moment.duration().as(String);
替換Duration#asX
等方法,可以使用Duration#as('x')
,moment#add中使用的單位簡寫,在這里也同樣適用。
duration.as('hours'); duration.as('minutes'); duration.as('seconds'); duration.as('milliseconds');
13. 取值:get()
moment.duration().get(String);
替換Duration#x
等方法,可以使用Duration#get('x')
,moment#add中使用的單位簡寫,在這里也同樣適用。
duration.get('hours'); duration.get('minutes'); duration.get('seconds'); duration.get('milliseconds');
14. 轉(zhuǎn)換為JSON:toJSON()
moment.duration().toJSON();
將時(shí)間段對象序列化成JSON時(shí),其會(huì)按ISO8601標(biāo)準(zhǔn)的字符串進(jìn)行轉(zhuǎn)換。
JSON.stringify({ postDuration : moment.duration(5, 'm') }); // '{"postDuration":"PT5M"}'
15. 是否時(shí)間段:isDuration()
moment.isDuration(obj);
檢查是否是一個(gè)有效的時(shí)間段對象,使用moment.isDuration()
moment.isDuration() // false moment.isDuration(new Date()) // false moment.isDuration(moment()) // false moment.isDuration(moment.duration()) // true moment.isDuration(moment.duration(2, 'minutes')) // true
總結(jié) :
moment.duration(now())? ? 獲取當(dāng)前時(shí)間
moment.duration(now()).asHours() //獲取當(dāng)前時(shí)間的小時(shí)時(shí)間段 asMilliseconds()//毫秒 asSeconds()//秒 asMinutes()//分 asHours()//時(shí) asDays()//天 asMonths()//月 asYears()//年
不加 as 的時(shí)候,是獲取時(shí)間值
附:
一個(gè)使用 moment
模塊計(jì)算時(shí)間差的示例:
const moment = require('moment'); const start = moment('2023-05-01 09:00:00', 'YYYY-MM-DD HH:mm:ss'); const end = moment(); const diff = end.diff(start); console.log(moment.duration(diff).asMinutes()); // 輸出兩個(gè)時(shí)間之間間隔的分鐘數(shù)
在這個(gè)示例中,首先引入了 moment
模塊,并使用 moment()
方法創(chuàng)建了兩個(gè)日期對象 start
和 end
。其中,start
表示起始日期和時(shí)間,使用 moment()
方法可以從標(biāo)準(zhǔn)的日期字符串或 JavaScript Date 對象創(chuàng)建日期對象。end
則表示當(dāng)前時(shí)間,通過直接調(diào)用moment()
創(chuàng)建當(dāng)前時(shí)間的日期對象。
然后,使用 diff()
方法計(jì)算 end
和 start
之間的時(shí)間差,將結(jié)果保存到變量 diff
中。接著,將 diff
傳遞給 duration()
方法,創(chuàng)建一個(gè)持續(xù)時(shí)間對象,并使用 asMinutes()
方法獲取該持續(xù)時(shí)間以分鐘為單位的值。
最后,將兩個(gè)時(shí)間之間的間隔分鐘數(shù)輸出到控制臺(tái)上。
相關(guān)文章
nodejs實(shí)現(xiàn)發(fā)出蜂鳴聲音(系統(tǒng)報(bào)警聲)的方法
這篇文章主要介紹了nodejs實(shí)現(xiàn)發(fā)出蜂鳴聲音(系統(tǒng)報(bào)警聲)的方法,結(jié)合實(shí)例形式分析了nodejs發(fā)出蜂鳴聲的原理及具體應(yīng)用方法,需要的朋友可以參考下2017-01-01詳解koa2學(xué)習(xí)中使用 async 、await、promise解決異步的問題
這篇文章主要介紹了詳解koa2學(xué)習(xí)中使用 async 、await、promise解決異步的問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11windows系統(tǒng)下安裝npm(Node.js)方法教程
在Windows環(huán)境下進(jìn)行Node.js的安裝并不是一件復(fù)雜的事情,但是在安裝過程中需要注意一些細(xì)節(jié),下面這篇文章主要給大家介紹了關(guān)于windows系統(tǒng)下安裝npm(Node.js)的相關(guān)資料,需要的朋友可以參考下2023-12-12node登錄生成token并驗(yàn)證的實(shí)現(xiàn)
token校驗(yàn)作為項(xiàng)目里的必要項(xiàng),其重要性不言而喻,本文主要介紹了node登錄生成token并驗(yàn)證的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02