JavaScript: Làm việc với đối tượng ngày

Tram Ho

Chào mọi người, hôm nay mình muốn giới thiệu với mọi người về Date Object, 1 trong những đối tượng mà chúng ta hầu như đều đụng đến ở mọi dự án.
Và mình muốn chia sẻ hiểu biết của mình về Date Object trong Javascript đến cho mọi người. Let’s go!

I. Khái niệm cơ bản:

JavaScript Date Object lets us work with dates:

What will happen when i call today?

Date Object được giới thiệu là một đối tượng - Object chứa thông tin về thời gian, và tất nhiên Date Object cũng có những method để giúp chúng ta lấy được giá trị đó.

II. Khai báo mới:

Biến today sẽ có giá trị là thời điểm của đoạn code trên được biên dịch và thực hiện. Ví dụ nếu như code thực hiện vào 19:00 và pending
3 giây bằng setTimeout rồi console.log thì giá trị vẫn là 19:00 nha.

Run Code Here!

Ồ, bạn thấy 2 dãy số loằng ngoằng giống nhau thay vì giá trị thời gian như ở ví dụ ban đầu hả?

Mình có thay đổi 1 chút, sử dụng today lấy giá trị từ Date.now(). Nó sẽ lấy chính xác giá trị thời gian thôi, nhưng theo 1 định dạng khác, gọi là Dates as Milliseconds, sẽ lấy mốc là 00:00:00 ngày 01, tháng 1, năm 1970 (UTC).

Run Code Here!

Ngoài ra, chúng ta còn có thể tạo 1 Date Object từ dữ liệu có sẵn:

Run Code Here!

Hãy lưu ý rằng:

JavaScript counts months from 0 to 11.

January is 0. December is 11.

III. Format:

Có 3 kiểu định dạng Date chính trọng Javascript, trong đó kiểu ISO có tên đầy đủ là ISO-8601 và định dạng của IOSYYYY-MM-DDTHH:mm:ss.sssZ cũng sẽ là kiểu mặc định khi bạn tạo mới 1 Date Object:

KiểuVí dụ
ISO Date“1998-01-10” (The International Standard)
Short Date01/10/1998
Long Date“Jan 10 1998″ hoặc”10 Jan 1998”

IV. Working with Date Object:

1. Date Methods:

Đối tượng Date Object cung cấp nhiều methods để xử lý thời gian, bạn có thể check list methods ở ĐÂY. Chúng ta sẽ đi qua một vài methods thường được dùng:

  • getDate() : lấy ngày của tháng:

  • getDay() : lấy thứ trong tuần, với giá trị trả về là 0-6, tương ứng với Sunday-Saturday:

  • getMonth() : lấy tháng với giá trị từ 0-11, tương ứng với Jan-Dec:

  • getFullYear() : lấy năm:

Chúng ta cũng có methods lấy giờ:

  • getMilliseconds() : lấy giây.
  • getMinutes() : lấy phút.
  • getHours() : lấy giờ:

Ngoài ra chúng ta còn có các methods cho giờ quốc tế bằng việc thêm UTC sau get và trước phần tử chúng ta cần lấy:

  • getUTCDate(): lấy giờ theo mốc UTC.

2. Xử lý ngày giờ trong 1 project:

Như các bạn thấy, Date Object hỗ trợ chúng ta rất đầy đủ các methods, xong việc sử dụng lại là một vấn đề khác.

Chẳng hạn, chúng ta muốn lấy ra giờ hiện tại chẳng hạn, bạn có chắc mình sẽ thích sử dụng các methods của Date Object?

Nếu chúng ta lấy ra định dạng khác thì sao? Chẳng hạn: MM-DD-YYYY hh:mm, đoạn code trên sẽ rất là dài, nào là get giờ phút giây, rồi check xem giá trị có bé hơn 10 không để chèn thêm số 0.
Lúc này chúng ta thường tìm đến sự trợ giúp từ các Date Libraries bên ngoài, và được đông đảo người dùng nhất có lẽ là moment.js. Hỗ trợ nhiều dạng, từ format cho đến locales. Nhưng vấn đề của Moment.js khiến mình và nhiều Dev khác không thích có lẽ là kích thước:

Profile xịn xò từ phía moment.js

Nhưng chúng ta đã bỏ sót đi 1 bạn khác, đó là Intlbuilt-in Object của Javascript. Intl là 1 API ra mắt vào năm 2012 (đọc thêm ở đây nè!), với kha khá công dụng:

which provides language sensitive string comparison, number formatting, and date and time formatting.

Để có thể format date bằng methods DateTimeFormat:

Ví dụ:

Cách thức sử dụng Intl.DateTimeFormat cũng cực kỳ đơn giản:

  • Thay đổi locales cho định dạng ngày tháng hoặc giờ.
  • Thay đổi options cho cách hiển thị:

Các bạn có thể xem qua các option được hỗ trợ ở dây.

Bây giờ, quay về với bài toán định dạng MM-DD-YYYY hh:mm, chúng ta sẽ sử dụng Intl.DateTimeFormat:

Vậy là bạn đã biết thêm 1 cách làm việc với Date Object rồi phải không? Kể từ khi biết đến Intl.DateTimeFormat, mình đã từ chối mọi PR install moment.js trong các dự án có mình tham gia.

Song đây chỉ là lời khuyên của cá nhân mình thôi nhé, nếu một ngày bạn gặp 1 trường hợp làm việc với Date Object và cảm thấy phức tạp, bạn cũng có thể check qua list Date Time Libraries này!!~~

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo