momentJS日期處理類庫---時間加減處理
計算最近在使用JavaScript計算時間差的時候,發現很多問題需要處理,在檢視momentJS之後,發現非常容易。
console.log(moment().format("YYYY-MM-DD HH:mm:ss")); //當前時間 console.log(moment().subtract(10, "days").format("YYYY-MM-DD")); //當前時間的前10天時間 console.log(moment().subtract(1, "years").format("YYYY-MM-DD")); //當前時間的前1年時間 console.log(moment().subtract(3, "months").format("YYYY-MM-DD")); //當前時間的前3個月時間 console.log(moment().subtract(1, "weeks").format("YYYY-MM-DD")); //當前時間的前一個星期時間
在實際應用中,我們經常需要計算兩個時間的差值,用來確定消逝的時間,如下:
var m1 = moment('2017-12-18 10:00:20'), m2 = moment('2017-12-18 10:10:00'), du = moment.duration(m2 - m1, 'ms'); // 輸出結果為“10 分鐘” console.log(du.locale('zh-cn').humanize()) 在要求精確的環境中,比如要精確到秒,並且能提供秒遞增的動畫功能,此時“humanize()”就顯得力不從心,但duration又沒有提供moment的“format”方法,怎麼辦呢?
初步的想法是將moment.duration物件轉換為moment物件,然後再利用“format”方法進行轉換,但是結果卻多了8小時,如下:
var m1 = moment('2017-12-18 10:00:20'), m2 = moment('2017-12-18 10:10:00'), du = moment(m2 - m1).format('HH時mm分ss秒'); // 輸出結果為08時09分40秒 console.log(du);
8小時,很容易就讓我們想到是時區的問題,可以通過如下方式進行驗證:
du = moment(m2 - m1).format('HH時mm分ss秒 ZZ'); // 輸出結果為08時09分40秒 +0800 console.log(du)
粗暴的方式是直接減去8小時的資料,優雅的方式是引入Moment Timezone,如下:
// Africa/Abidjan為+00:00時區 // 輸出結果00時09分40秒 du = moment.tz(m2 - m1, "Africa/Abidjan").format('HH時mm分ss秒')