Những thư viện xử lý ngày tháng trong javascript

Date trong JavaScript là một đối tượng sẵn có giúp bạn lưu trữ date [ngày, tháng, năm], time [giờ, phút, giây] và quản lý date/time.

Ví dụ, bạn có thể sử dụng Date để lưu thời gian tạo và chỉnh sửa dữ liệu, đo lường thời gian hay hiển thị thời gian hiện tại.

Để khởi tạo một đối tượng Date trong JavaScript, bạn chỉ cần gọi hàm khởi tạo new Date[] với một trong các tham số sau đây.

new Date[]

Hàm khởi tạo không tham số tạo mới một đối tượng Date với thời gian hiện tại, ví dụ:

let currentDate = new Date[];
console.log[currentDate];

// hiển thị thời gian hiện tại, ví dụ:
// Sun Dec 19 2021 09:25:51 GMT+0700 [Indochina Time]

new Date[milliseconds]

Tạo mới đối tượng Date với thời gian tương ứng với milliseconds [mili giây] sau ngày 01/01/1970 UTC+0.

// 0 tương ứng với ngày 01/01/1970 UTC+0
let jan01_1970 = new Date[0];
console.log[jan01_1970]; // Thu Jan 01 1970 07:00:00 GMT+0700 [Indochina Time]

// cộng thêm 24 giờ => ngày 02/01/1970 UTC+0
let jan02_1970 = new Date[24 * 3600 * 1000];
console.log[jan02_1970]; // Fri Jan 02 1970 07:00:00 GMT+0700 [Indochina Time]

Số nguyên ứng với tham số milliseconds biểu diễn số mili giây sau ngày 01/01/1970 UTC+0 được gọi là timestamp.

Chú ý: kết quả của câu lệnh console.log[jan01_1970] trên là ứng với múi giờ +0700 tại Việt Nam.

Vì vậy, thời gian hiển thị là 07:00:00 [7 giờ 00 phút 00 giây], thay vì 00:00:00 [0 giờ 00 phút 00 giây] tại múi giờ +0000.

Bạn có thể tạo mới đối tượng Date từ timestamp [như trên]. Ngược lại, bạn cũng có thể chuyển đổi kiểu dữ liệu từ đối tượng Date ra timestamp bằng phương thức date.getTime[] [được trình bày bên dưới].

Thời gian trước ngày 01/01/1970 có timestamp âm, ví dụ ngày 31/12/1969:

// ngày 31/12/1969 trước ngày 01/01/1970 là 1 ngày
let dec31_1969 = new Date[0 - 24 * 3600 * 1000];
console.log[dec31_1969]; // Wed Dec 31 1969 07:00:00 GMT+0700 [Indochina Time]

new Date[string]

Nếu hàm khởi tạo Date trong JavaScript có một tham số và đó là string thì string sẽ được chuyển đổi tự động sang Date.

Thuật toán chuyển đổi string sang đối tượng Date tương tự như cách sử dụng của phương thức Date.parse[] [được trình bày bên dưới].

let date = new Date["2021-12-19"];
console.log[date]; // Sun Dec 19 2021 07:00:00 GMT+0700 [Indochina Time]

// Thời gian không được cài đặt, nên mặc định đó là 00:00:00 tại GMT+0000,
// hoặc 07:00:00 tại GMT+0700.

new Date[year, month, date, hours, minutes, seconds, ms]

Đây là hàm khởi tạo đầy đủ các thông tin của Date trong JavaScript với múi giờ local. Trong đó, hai tham số đầu tiên yearmonth là bắt buộc.

  • year [năm] phải có 4 chữ số: 2021 là hợp lệ, 21 là không hợp lệ.
  • month [tháng] đếm từ 0 [tháng 1] đến 11 [tháng 12].
  • date là ngày trong tháng, nếu không truyền gì vào thì mặc định giá trị của tham số date1.
  • hours [giờ], minutes [phút], seconds [giây] và ms [mili giây] nếu không truyền vào thì mặc định là 0.

Ví dụ hai câu lệnh sau khởi tạo đối tượng Date giống nhau:

new Date[2021, 0, 1, 0, 0, 0, 0]; // 1 Jan 2021, 00:00:00
new Date[2021, 0, 1]; // giống câu lệnh trên

Độ chính xác tối đa là 1 mili giây:

let date = new Date[2021, 0, 1, 2, 3, 4, 567];
// 01/01/2021, 02:03:04.567

Truy cập các phần tử của Date

Sau đây là những phương thức phổ biến để truy cập vào các phần tử của Date trong JavaScript:

  • Phương thức getFullYear[]: trả về năm [gồm 4 chữ số].
  • Phương thức getMonth[]: trả về tháng [từ 0 đến 11].
  • Phương thức getDate[]: trả về ngày trong tháng [từ 1 đến 31].
  • Phương thức getHours[]: trả về giờ.
  • Phương thức getMinutes[]: trả về phút.
  • Phương thức getSeconds[]: trả về giây.
  • Phương thức getMilliseconds[]: trả về mili giây.

Chú ý: phương thức getYear[] đã lỗi thời và chỉ trả về hai chữ số của năm. Vì vậy, bạn không nên sử dụng phương thức getYear[].

Ngoài ra, bạn có thể lấy ngày trong tuần bằng phương thức getDay[] - trả về giá trị từ 0 [thứ 2] đến 6 [chủ nhật].

Tất cả phương thức trên đều trả về giá trị tương đối ứng với múi giờ trên máy tính. Múi giờ của Việt Nam là +0700.

Để lấy giá trị ngày, tháng, năm,... tại múi giờ UTC+0, bạn chỉ cần viết thêm UTC vào các phương thức trên, phía sau get, ví dụ: getUTCFullYear[], getUTCMonth[], getUTCDate[],...

let date = new Date[];
console.log[date.getHours[]]; // 10
console.log[date.getUTCHours[]]; // 3

Ngoài các phương thức trên, còn hai phương thức khác không có UTC là:

  • getTime[]: trả về timestamp của date.
  • getTimezoneOffset[]: trả về sự sai khác về múi giờ giữa UTC+0 với múi giờ trên máy tính [tính theo phút].

let date = new Date[];
console.log[date.getTime[]]; // 1639883864463
console.log[date.getTimezoneOffset[]]; // -420 [ứng với -7 giờ]

Thay đổi các phần tử của Date

Để thay đổi giá trị các phần tử của Date trong JavaScript, bạn sử dụng một trong các phương thức sau đây:

  • Phương thức setFullYear[year, [month], [date]]
  • Phương thức setMonth[month, [date]]
  • Phương thức setDate[date]
  • Phương thức setHours[hour, [min], [sec], [ms]]
  • Phương thức setMinutes[min, [sec], [ms]]
  • Phương thức setSeconds[sec, [ms]]
  • Phương thức setMilliseconds[ms]
  • Phương thức setTime[milliseconds]

Tất cả các phương thức trên - ngoại trừ setTime[], đều có dạng UTC, ví dụ: setUTCHours[].

Và một số phương thức bên trên có nhiều tham số. Trong đó, tham số đầu tiên là bắt buộc, các tham số sau nếu không set thì bỏ qua, ví dụ setHours[hour, [min], [sec], [ms]].

let today = new Date[];
console.log[today]; // thời gian hiện tại

today.setHours[0];
console.log[today]; // ngày hiện tại, nhưng giờ được set thành 0

today.setHours[0, 0, 0, 0];
console.log[today]; // ngày hiện tại, nhưng giờ, phút, giây, mili giây đều = 0

Tự động điều chỉnh date

Đối tượng Date trong JavaScript có một tính năng khá hữu ích đó là: tự động điều chỉnh thời gian, ví dụ:

let date = new Date[2021, 0, 32]; // 32/01/2021 - ngày không hợp lệ
console.log[date]; // tự động điều chỉnh thành 01/02/2021!

Tham số truyền vào vượt ngoài giá trị cho phép của ngày, tháng, năm,... được tự động điều chỉnh tăng hoặc giảm.

Giả sử, bạn muốn tăng từ ngày 28/02/2021 lên 2 ngày. Bạn không chắc đó là ngày 01/03/2021 hay 02/03/2021. Vì bạn không rõ năm 2021 có phải là năm nhuận hay không.

Với đối tượng Date trong JavaScript, bạn chỉ cần cộng thêm 2 ngày. JavaScript engine sẽ xử lý cho bạn.

let date = new Date[2021, 1, 28];
date.setDate[date.getDate[] + 2];

console.log[date]; // Tue Mar 02 2021 00:00:00 GMT+0700 [Indochina Time]

Tính năng này còn được áp dụng để lấy Date sau một khoảng thời gian. Ví dụ lấy thông tin Date sau khoảng thời gian 80 giây tính từ hiện tại:

let date = new Date[];
console.log[date]; // Sun Dec 19 2021 10:50:50 GMT+0700 [Indochina Time]

date.setSeconds[date.getSeconds[] + 80];
console.log[date]; // Sun Dec 19 2021 10:52:10 GMT+0700 [Indochina Time]

Ngoài ra, bạn có thể truyền tham số là 0 hoặc số âm. Khi đó, thời gian được lấy lùi lại quá khứ:

let date = new Date[2021, 0, 2]; // 02/01/2021

date.setDate[1]; // set ngày của tháng thành mùng 1
console.log[date]; // 01/01/2021

date.setDate[0]; // set ngày của tháng bằng 0 => ngày cuối cùng của tháng trước
console.log[date]; // 31/12/2020

Chuyển Date về number

Khi đối tượng Date trong JavaScript được chuyển đổi về dạng số, Date sẽ trở thành timestamp, giống như cách sử dụng date.getTime[].

let date = new Date[];
console.log[+date]; // 1639886372852
console.log[date.getTime[]]; // 1639886372852

Ngoài ra, bạn có thể trừ hai giá trị Date trong JavaScript cho nhau. Kết quả trả về là số mili giây chênh lệch.

Tính năng này được áp dụng để tính thời gian của một tác vụ:

// bắt đầu tính thời gian
let start = new Date[];

// bắt đầu tác vụ
for [let i = 0; i 

Chủ Đề