Giới thiệu
Khi làm việc với dates và times trong javascript cũng không phải lúc nào cũng dễ dàng. Hôm này mình xin giới thiệu một thư viện javascript rất mạnh và tốt sử dùng để phân tích, xác nhận, thao tác và hiển thị dates và times. Đó là Moment.js
Cách cài đặt
Moment.js có thể download miễn phí tại trang chủ của nó: https://momentjs.com/. Hoặc có thể install bằng node module sử dụng command như sau:
npm install moment
Date Formatting
Sử dụng Moment.js để format daté và times giúp bạn viết code đơn giản và dễ dàng hơn nhiều. Ví dụ đơn giản như sau:
moment().format('YYYY MM DD'); // date time hiện tại có format YYYY MM DD
moment("2017-01-01").format("DD MMM YYYY") // 01 Jan 2017
format của date times, bạn có thể tìm thêm ở docs của moment.js.
Date Validation
Sử dụng moment.js để xác nhận date time đưa vào có đúng format là date time không.
Sử dụng method isValid()
, trả về true/false.
moment("2010 13", "YYYY MM").isValid(); // false (sai tháng)
moment("2010 11 31", "YYYY MM DD").isValid(); // false (sai ngày)
moment("2010 2 29", "YYYY MM DD").isValid(); // false (không phải năm nhuận)
moment("2010 notamonth 29", "YYYY MMM DD").isValid(); // false (sai tên tháng)
Một số cần chú ý là parser
của moment.js khá là tha thứ ), tức là dù nó phân tích thấy rằng một từ nào đó trong date time đó là đúng, nó sẽ isValid()
sẽ trả về true.
moment('2016 is a date', 'YYYY-MM-DD').isValid() //true, 2016 was matched
moment('It is 2012-05-25', 'YYYY-MM-DD').isValid(); // true 2012-05-25 matched
Nếu bạn cần parser của moment chặn chẽ hơn, bạn phải thêm boolean làm arguement cuối cùng.
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
moment('2012.05.25', 'YYYY-MM-DD', true).isValid(); // false
Để biết là nó invalid ở đâu, bạn có thể dùng hàm invalidAt()
như sau:
moment("2014-14-01").invalidAt(); // 1 => month
moment("2014-01-32").invalidAt(); // 2 => day
Giá trị trả về như của nó:
1: years
2: months
3: days
4: hours
5: minutes
6: seconds
7: milliseconds
Manipulating Dates
Moment.js cung cấp nhiều hàm quan trọng để thao tác với date time:
Add
moment().add(Number, String);
moment().add(Duration);
moment().add(Object);
ví dụ: moment().add(7, 'days'); // trả về object có date time 7 ngày sau moment().add(7, 'd'); // viết tắt như trên
Key | Shorthand |
---|---|
years | y |
quarters | Q |
months | M |
weeks | w |
days | d |
hours | h |
minutes | m |
seconds | s |
milliseconds | ms |
Bạn cũng có thể chain hàm trên với nhau:
moment().add(7, 'days').add(1, 'months'); // with chaining
Subtract
moment().subtract(Number, String);
moment().subtract(Duration);
moment().subtract(Object);
ví dụ
moment().subtract(7, 'days');
Start of Time
moment().startOf('year'); // set to January 1st, 12:00 am this year
moment().startOf('month'); // set to the first of this month, 12:00 am
moment().startOf('quarter'); // set to the beginning of the current quarter, 1st day of months, 12:00 am
moment().startOf('week'); // set to the first day of this week, 12:00 am
moment().startOf('isoWeek'); // set to the first day of this week according to ISO 8601, 12:00 am
moment().startOf('day'); // set to 12:00 am today
moment().startOf('date'); // set to 12:00 am today
moment().startOf('hour'); // set to now, but with 0 mins, 0 secs, and 0 ms
moment().startOf('minute'); // set to now, but with 0 seconds and 0 milliseconds
moment().startOf('second'); // same as moment().milliseconds(0);
End of Time
moment().endOf("year"); // set the moment to 12-31 23:59:59.999 this year
Time from now
moment().fromNow(); // time ago
moment().fromNow(Boolean); // relative time
moment("2012-01-01").fromNow(); // 6 years ago
moment("2012-01-01").fromNow(true); // 6 years
Time from X
moment().from(Moment|String|Number|Date|Array);
moment().from(Moment|String|Number|Date|Array, Boolean);
var a = moment([2007, 0, 28]); // có thể viết array or string
var b = moment([2007, 0, 29]); / có thể viết array or string
a.from(b) // "a day ago"
Difference
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days') // 1
Days in Month
Trả về số ngày của tháng
moment("2012-02", "YYYY-MM").daysInMonth() // 29
moment("2012-01", "YYYY-MM").daysInMonth() // 31
Is Leap Year
Kiểm tra là năm nhuận hay không
moment([2000]).isLeapYear() // true
moment([2001]).isLeapYear() // false
moment([2100]).isLeapYear() // false
Get
moment().get('year');
moment().get('month'); // 0 to 11
moment().get('date');
moment().get('hour');
moment().get('minute');
moment().get('second');
moment().get('millisecond');
Conclusion
Nhờ việc sử dụng thư viện Moment.js, việc thao tác và làm việc với date times sẽ không phải là vấn đề khó khăn nữa. Bài nay chỉ tóm tắt những ý và method quan trọng và thường dùng với date time, tuy nhiên còn rất nhiều method khác nữa, bạn có thể tham khảo chi tiết tại Moment.js.
https://www.sitepoint.com/managing-dates-times-using-moment-js/ https://momentjs.com/docs/