- vừa được xem lúc

Thao tác với Dates và Times sử dụng Moment.js

0 0 9

Người đăng: yongsokheng

Theo Viblo Asia

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/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 502

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 378

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 702

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 336

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 424

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 415