簡易實用的JavaScript日期時間操作!

龍泉_springlong發表於2018-04-15

前言

在這裡推薦一款簡易實用的JavaScript日期時間處理工具:easedate.js

easedate.js 在原生Date物件的基礎上,提供了日期輸出的格式化,以及日期時間的加減計算、時差計算、條件判斷、鏈式操作等功能,方便專案中的日期時間進行相關處理!

歡迎訪問 github.com/springlong/…

使用easydate

Node.js:

npm install easydate.js
複製程式碼
const easydate = require('easydate.js');
複製程式碼

amd:

define(['easydate.js'], function(easydate){ });
複製程式碼

script tag:

<script src="easydate.js"></script>
複製程式碼

關於easydate

使用easydate函式建立例項

// 給定日期字串
const edate = easydate('2018/03/17 16:08:32');

// 給定時間戳
const edate2 = easydate(1521274112000);

// 給定已有日期物件
const edate3 = easydate(new Date());

// 預設當前系統時間
const edate4 = easydate();
複製程式碼

條件判斷

對於日期比較類方法的引數型別,可以是日期字串、時間戳、Date物件例項、easydate物件例項。

// (boolean) 判斷日期時間的有效性
edate.isValid();

// (boolean) 判斷是否是閏年
edate.isLeapYear();

//(boolean)  判斷當前日期是否在目標日期之前
edate.isBefore('2018/03/18');

// (boolean) 判斷當前日期是否在目標日期之後
edate.isAfter('2018/03/16');

// (boolean) 判斷當前日期是否和目標日期一致
edate.isSame('2018/03/17 16:08:32');

// (boolean) 判斷當前日期是否介於兩個日期之間
edate.isBetween('2018/03/18', '2018/03/16');
複製程式碼

獲取日期時間的資訊部分

// (Date) 日期物件
edate.date;

// (number) 返回毫秒級快照
edate.valueOf();

// (number) 返回年份
edate.getFullYear();

// (number) 返回月份,月份值從1~12
edate.getMonth();

// (number) 返回當月的第幾天
edate.getDate();

// (number) 返回當週的第幾天,值從0~6表示週日~週六
edate.getDay();

// (number) 返回時鐘
edate.getHours();

// (number) 返回分鐘
edate.getMinutes();

// (number) 返回秒鐘
edate.getSeconds();

// (number) 返回毫秒數
edate.getMilliseconds();

// (number) 返回當前日期時間屬於一年中的第幾周
edate.getWeekth();

// (number) 返回當前日期時間所處的當月有多少天
edate.getMonthDays();
複製程式碼

日期時間的格式化輸出

格式化字元碼:

  1. yyyy - 四位數字的年份
  2. yy - 兩位數字的年份
  3. MM - 兩位數字的月份
  4. M - 月份
  5. dd - 兩位數字的天數
  6. d - 天數
  7. HH - 兩位數字的24小時制時鐘
  8. H - 24小時制時鐘
  9. hh- 兩位數字的12小時制時鐘
  10. h- 12小時制時鐘
  11. mm - 兩位數字的分鐘
  12. m - 分鐘
  13. ss - 兩位數字的秒鐘
  14. s - 秒鐘
  15. tt - 上午/下午
  16. S - 毫秒
// 格式化輸出 '2018/03/17 16:08:32'
// 等同於.format('yyyy-MM-dd HH:mm:ss')
edate.format();

// 格式化輸出 '18/3/17 16:8:32'
edate.format('yy-M-d H:m:s');

// 格式化輸出 '2018/03/17 16:08:32'
edate.format('yyyy-MM-dd HH:mm:ss');

// 格式化輸出 '2018年03月17日 下午 04:08:32'
edate.format('yyyy年MM月dd日 tt hh:mm:ss');

// 返回日期時間的字串表示 'Sat Mar 17 2018 16:08:32 GMT+0800 (中國標準時間)'
edate.toString();

// 返回本地格式的日期時間字串 '2018/3/17 下午4:08:32'
edate.toLocaleString();

// 返回本地格式的日期字串 '2018/3/17'
edate.toLocaleDateString();

// 返回本地格式的時間字串 '下午4:08:32'
edate.toLocaleTimeString();

// 根據世界時返回日期時間字串 'Sat, 17 Mar 2018 08:08:32 GMT'
// 請使用toUTCString()代替
edate.toGMTString();

// 根據世界時返回日期時間字串 'Sat, 17 Mar 2018 08:08:32 GMT'
edate.toUTCString();
複製程式碼

日期時間的計算

操作結果返回 easydate 例項本身,因此可以進行鏈式操作。

支援正負數,正數表示加上指定時間,負數表示減去指定時間。

// edate的參照值:
// 2018/03/17 16:08:32

// 秒鐘+1
// 2018/03/17 16:08:33
edate.calc('second', 1);  

// 分鐘+1
// 2018/03/17 16:09:33
edate.calc('minute', 1);  

// 時鐘+1
// 2018/03/17 17:09:33
edate.calc('hour', 1);  

// 天數+1
// 2018/03/18 17:09:33
edate.calc('day', 1);  

// 月份+1
// 2018/04/18 17:09:33
edate.calc('month', 1);  

// 年份+1
// 2019/04/18 17:09:33
edate.calc('year', 1);  

// 擷取日期部分
// 2018/04/18 00:00:00
edate.toDatePart();  

// 克隆一份副本
// 2018/04/18 00:00:00
edate.clone();

複製程式碼

設定日期時間的指定部分

操作結果返回 easydate 例項本身,setMonth()中月份的值從 1 ~ 12

// edate的參照值:
// 2018/04/18 00:00:00

// 設定年份 2018/04/18 00:00:00
edate.setFullYear(2019);  

// 設定月份 2018/06/18 00:00:00
edate.setMonth(6);  

// 設定當月的第幾天 2018/06/25 00:00:00
edate.setDate(25);

// 設定時鐘 2018/06/25 10:00:00
edate.setHours(10);

// 設定分鐘 2018/06/25 10:32:00
edate.setMinutes(32);

// 設定秒鐘 2018/06/25 10:32:58
edate.setSeconds(58);

// 設定毫秒 2018/06/25 10:32:58 100
edate.setMilliseconds(100);
複製程式碼

計算時間差

對於日期比較類方法的引數型別,可以是日期字串、時間戳、Date物件例項、easydate物件例項。

// edate的參照值:
// 2018-03-23 12:00:00
edate.diff('2018-03-24 16:30:55', 'json');   // {year: 0, month: 0, day: 1, hour: 4, minite: 30, second: 55}
edate.diff('2018-03-24 16:30:55', 'year');   // 0 (相差不足1年)
edate.diff('2018-03-24 16:30:55', 'month');  // 0 (相差不足1個月)
edate.diff('2018-03-24 16:30:55', 'day');    // 1 (相差1天)
edate.diff('2018-03-24 16:30:55', 'hour');   // 28 (相差28個小時)
edate.diff('2018-03-24 16:30:55', 'minute'); // 1710 (相差1710分鐘)
edate.diff('2018-03-24 16:30:55', 'second'); // 102655 (相差102655秒)
edate.diff('2018-03-24 16:30:55');           // 1 (相差1天)
複製程式碼

鏈式操作

// output: 2018/03/23 12:00:00
easydate('2018/03/17 16:08:32').toDatePart().calc('day', 6).calc('hour', 12).format();
複製程式碼

靜態方法

對於日期比較類方法的 dateStr 引數的型別,可以是日期字串、時間戳、Date物件例項、easydate物件例項。

// easydate.isValid(dateStr)
// 判斷日期時間的有效性
// 返回值型別: boolean
easydate.isValid();  // false
easydate.isValid('2018-03-28 xx:33:25');  // false
easydate.isValid('2018-03-28 18:33:25');  // true

// easydate.isLeapYear(year)
// 判斷是否為閏年
// 返回值型別: boolean
easydate.isLeapYear();  // false
easydate.isLeapYear(2018);  // false
easydate.isLeapYear(2020);  // true

// easydate.getWeekth(dateStr)
// 返回一個日期時間處於一年中的第幾周
// 返回值型別:number
// 如果是無效日期則返回NaN
easydate.getWeekth('2018-01-01');  // 1
easydate.getWeekth('2018-12-29');  // 52
easydate.getWeekth('2018-12-31');  // 53

// easydate.getMonthDays(dateStr)
// 返回一個日期時間所處的當月有多少天
// 返回值型別:number
// 如果是無效日期則返回NaN
easydate.getMonthDays('2018-01-01');  // 31
easydate.getMonthDays('2018-02-01');  // 28
easydate.getMonthDays('2018-03-01');  // 31
easydate.getMonthDays('2018-04-01');  // 30

// easydate.diff (startDate, endDate, unit)
// 計算兩個日期之間的時間差,單位預設以“天”表示
easydate.diff('2018-01-01', false);  // NaN
easydate.diff('2018-01-01', '2018-01-01');  // 0(相差0天)
easydate.diff('2018-03-14', '2018-03-30');  // 16 (相差16天)
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'json');   //  {year: 0, month: 0, day: 25, hour: 2, minite: 20, second: 1, maxUnit: 'day'}
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'json');   //  {year: 1, month: 0, day: 3, hour: 2, minite: 20, second: 1, maxUnit: 'year'}
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'year');   // 1 (相差1年)
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'month');  // 12 (相差12個月)
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'day');    // 368 (相差368天)
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'hour');   // 8834 (相差8834小時)
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'minute'); // 530060 (相差530060分鐘)
easydate.diff('2018-01-31 10:30:55', '2019-02-03 12:50:56', 'second'); // 31803601 (相差31803601秒鐘)
複製程式碼

後續

如果你覺得還不錯,或者有相關更好的建議和想法,歡迎訪問我的 GitHub

相關文章