Các phương thức thiết lập ngày tháng trong JavaScript

Javascript căn bản | by Học Javascript

Trong lập trình web, việc làm việc với ngày tháng là một yêu cầu phổ biến, đặc biệt trong các ứng dụng đặt lịch, hiển thị thời gian, hoặc xử lý dữ liệu thời gian thực. JavaScript cung cấp nhiều phương thức để thiết lập ngày, tháng, năm, giờ, phút, giây trong đối tượng Date, giúp lập trình viên dễ dàng cập nhật và điều chỉnh thời gian theo nhu cầu. Hiểu rõ cách sử dụng các phương thức này không chỉ giúp cải thiện hiệu suất làm việc mà còn đảm bảo độ chính xác khi xử lý dữ liệu thời gian trong các ứng dụng thực tế.

Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết các phương thức thiết lập ngày tháng trong JavaScript cùng các ví dụ minh họa cụ thể.

Giới thiệu về các phương thức thiết lập ngày tháng trong JavaScript

Trong JavaScript, đối tượng Date không chỉ giúp lấy thông tin về ngày tháng mà còn cho phép lập trình viên thiết lập và cập nhật ngày, tháng, năm, giờ, phút, giây theo nhu cầu. Các phương thức thiết lập này giúp thay đổi giá trị của đối tượng Date mà không cần tạo mới một đối tượng khác.

Tại sao cần thiết lập ngày tháng?

Việc thiết lập ngày tháng là rất quan trọng trong nhiều tình huống thực tế, chẳng hạn như:

Cập nhật ngày tháng trong ứng dụng web

  • Hiển thị thời gian hiện tại theo múi giờ của người dùng.
  • Cập nhật thời gian khi người dùng chọn một ngày từ lịch.
  • Chỉnh sửa thông tin thời gian trong các biểu mẫu nhập liệu.

Xử lý thời gian cho các tác vụ như đặt lịch, tính toán thời gian, đếm ngược

  • Thiết lập ngày tháng cho một sự kiện trong tương lai (ví dụ: đặt lịch hẹn, lịch họp).
  • Thay đổi thời gian để tính toán khoảng cách giữa hai mốc thời gian.
  • Xây dựng bộ đếm thời gian (countdown timer).

Điều chỉnh múi giờ hoặc đồng bộ thời gian

  • Thiết lập thời gian theo múi giờ UTC hoặc múi giờ của người dùng.
  • Chỉnh sửa thời gian để đồng bộ dữ liệu giữa nhiều hệ thống.

Nhờ các phương thức thiết lập ngày tháng, lập trình viên có thể linh hoạt thay đổi giá trị thời gian trong ứng dụng mà không cần phải tạo mới đối tượng Date, giúp tối ưu hiệu suất và tăng tính linh hoạt trong xử lý dữ liệu thời gian.

II. Các phương thức thiết lập ngày tháng cơ bản

JavaScript cung cấp các phương thức giúp thay đổi từng thành phần của ngày tháng, bao gồm năm, tháng, ngày. Khi thiết lập giá trị, nếu vượt quá phạm vi hợp lệ, JavaScript sẽ tự động điều chỉnh giá trị cho phù hợp.


1. Thiết lập năm

Cú pháp:

date.setFullYear(year);
date.setFullYear(year, month, date);

Giải thích:

  • setFullYear(year): Cập nhật năm của đối tượng Date, giữ nguyên tháng và ngày.
  • setFullYear(year, month, date): Cập nhật cả năm, tháng, và ngày cùng lúc.
  • Nếu tháng hoặc ngày không hợp lệ, JavaScript sẽ tự động điều chỉnh.

Ví dụ:

let date = new Date();
console.log("Trước khi cập nhật:", date);

date.setFullYear(2025);
console.log("Sau khi thiết lập năm:", date);

date.setFullYear(2026, 11, 25); // Thiết lập năm 2026, tháng 12, ngày 25
console.log("Sau khi thiết lập năm, tháng, ngày:", date);

2. Thiết lập tháng

Cú pháp:

date.setMonth(month);

Giải thích:

  • setMonth(month): Thay đổi tháng của đối tượng Date.
  • Giá trị tháng bắt đầu từ 0 (Tháng 1) đến 11 (Tháng 12).
  • Nếu ngày hiện tại không hợp lệ với tháng mới, JavaScript sẽ tự động điều chỉnh sang tháng tiếp theo.

Ví dụ:

let date = new Date(2024, 0, 31); // Ngày 31/01/2024
console.log("Trước khi cập nhật tháng:", date);

date.setMonth(1); // Chuyển sang tháng 2 (Không có ngày 31, sẽ tự động điều chỉnh)
console.log("Sau khi cập nhật tháng:", date);
  • Kết quả: Do tháng 2 chỉ có 28 hoặc 29 ngày, JavaScript sẽ tự động điều chỉnh ngày thành 29 (hoặc 28 nếu không phải năm nhuận).


3. Thiết lập ngày

Cú pháp:​

date.setDate(day);

Giải thích:

  • setDate(day): Cập nhật ngày trong tháng.
  • Nếu đặt số ngày vượt quá số ngày hợp lệ của tháng hiện tại, JavaScript sẽ tự động chuyển sang tháng tiếp theo.

Ví dụ:

let date = new Date(2024, 1, 20); // Ngày 20/02/2024
console.log("Trước khi cập nhật ngày:", date);

date.setDate(30); // Tháng 2 chỉ có 29 ngày (năm nhuận), nên sẽ chuyển sang tháng 3
console.log("Sau khi cập nhật ngày:", date);

Kết quả: Do tháng 2 chỉ có 29 ngày (vì năm 2024 là năm nhuận), ngày 30 sẽ được tính vào ngày 1 của tháng 3.

Các phương thức thiết lập giờ, phút, giây trong JavaScript

JavaScript cung cấp các phương thức để cập nhật giá trị giờ, phút, giây và mili-giây trong đối tượng Date. Khi đặt giá trị vượt quá giới hạn hợp lệ, JavaScript sẽ tự động điều chỉnh thời gian.

Thiết lập giờ (setHours())

Cú pháp:

date.setHours(hour);
date.setHours(hour, minute, second, millisecond);

Giải thích:

  • setHours(hour): Cập nhật giờ trong khoảng 0 - 23 (định dạng 24 giờ).
  • setHours(hour, minute, second, millisecond): Thiết lập đồng thời giờ, phút, giây, mili-giây.
  • Nếu giá trị vượt quá giới hạn (ví dụ: giờ > 23), JavaScript sẽ tự động điều chỉnh sang ngày tiếp theo.

Ví dụ minh họa:

let date = new Date();
console.log("Trước khi cập nhật giờ:", date);

date.setHours(20); // Thiết lập giờ thành 20 (8 giờ tối)
console.log("Sau khi thiết lập giờ:", date);

date.setHours(25); // Quá 23h, tự động chuyển sang ngày hôm sau
console.log("Sau khi thiết lập giờ quá phạm vi:", date);

Thiết lập phút (setMinutes())

Cú pháp:

date.setMinutes(minute);

Giải thích:

  • setMinutes(minute): Cập nhật phút trong khoảng 0 - 59.
  • Nếu giá trị vượt quá 59, JavaScript sẽ tự động điều chỉnh sang giờ tiếp theo.

Ví dụ minh họa:

let date = new Date();
console.log("Trước khi cập nhật phút:", date);

date.setMinutes(45); // Thiết lập phút thành 45
console.log("Sau khi thiết lập phút:", date);

date.setMinutes(70); // Quá 59 phút, tự động tăng thêm 1 giờ
console.log("Sau khi thiết lập phút quá phạm vi:", date);

Thiết lập giây (setSeconds())

Cú pháp:

date.setSeconds(second);

Giải thích:

  • setSeconds(second): Cập nhật giây trong khoảng 0 - 59.
  • Nếu vượt quá 59, JavaScript sẽ tự động điều chỉnh sang phút tiếp theo.

Ví dụ minh họa:

let date = new Date();
console.log("Trước khi cập nhật giây:", date);

date.setSeconds(30); // Thiết lập giây thành 30
console.log("Sau khi thiết lập giây:", date);

date.setSeconds(75); // Quá 59 giây, tự động tăng thêm 1 phút
console.log("Sau khi thiết lập giây quá phạm vi:", date);

Thiết lập mili-giây (setMilliseconds())

Cú pháp:

date.setMilliseconds(ms);

Giải thích:

  • setMilliseconds(ms): Cập nhật mili-giây trong khoảng 0 - 999.
  • Nếu vượt quá 999, JavaScript sẽ tự động điều chỉnh sang giây tiếp theo.

Ví dụ minh họa:

let date = new Date();
console.log("Trước khi cập nhật mili-giây:", date);

date.setMilliseconds(500); // Thiết lập mili-giây thành 500
console.log("Sau khi thiết lập mili-giây:", date);

date.setMilliseconds(1200); // Quá 999 mili-giây, tự động tăng thêm 1 giây
console.log("Sau khi thiết lập mili-giây quá phạm vi:", date);

Thiết lập timestamp (dấu thời gian) trong JavaScript

JavaScript cung cấp phương thức setTime(milliseconds) để thiết lập thời gian của một đối tượng Date dựa trên timestamp (số mili-giây tính từ ngày 01/01/1970 00:00:00 UTC – còn gọi là Unix Epoch).

Cú pháp của setTime()

date.setTime(milliseconds);
  • milliseconds: Số mili-giây tính từ mốc thời gian 01/01/1970 00:00:00 UTC.
  • Phương thức này giúp cập nhật nhanh ngày giờ bằng cách sử dụng timestamp.

Ứng dụng của setTime()

Thiết lập ngày giờ từ timestamp đã lưu trữ

Trong nhiều hệ thống, ngày tháng được lưu dưới dạng timestamp để dễ dàng chuyển đổi giữa các múi giờ. setTime() giúp chúng ta tái tạo đối tượng Date từ timestamp đó.

Ví dụ:

let date = new Date();
console.log("Thời gian hiện tại:", date);

let timestamp = 1700000000000; // Timestamp đại diện cho một ngày cụ thể
date.setTime(timestamp); 
console.log("Sau khi thiết lập timestamp:", date);

Giải thích:

  • Timestamp 1700000000000 tương ứng với 14/11/2023 09:13:20 UTC (tùy vào múi giờ của hệ thống).
  • setTime(timestamp) cập nhật đối tượng Date theo timestamp đã cung cấp.

Đồng bộ dữ liệu thời gian giữa các hệ thống

Trong các ứng dụng thực tế như API, hệ thống đặt vé, đồng bộ dữ liệu, timestamp thường được sử dụng thay vì lưu trữ chuỗi ngày tháng. Điều này giúp đảm bảo tính nhất quán khi làm việc với nhiều múi giờ khác nhau.

Ví dụ: Chuyển đổi timestamp từ API thành ngày giờ hiển thị

function convertTimestampToDate(timestamp) {
    let date = new Date();
    date.setTime(timestamp);
    return date.toLocaleString(); // Hiển thị theo ngôn ngữ địa phương
}

let serverTimestamp = 1700000000000; // Dữ liệu từ API
console.log("Thời gian tương ứng:", convertTimestampToDate(serverTimestamp));

Ứng dụng thực tế:

  • Khi nhận dữ liệu thời gian từ API, ta có thể dùng setTime() để chuyển timestamp thành đối tượng Date và hiển thị cho người dùng.

So sánh hai mốc thời gian bằng timestamp

Bằng cách sử dụng setTime(), chúng ta có thể dễ dàng tính toán khoảng cách giữa hai thời điểm.

Ví dụ: Tính số ngày giữa hai timestamp

let start = new Date();
start.setTime(1700000000000); // Ngày bắt đầu

let end = new Date();
end.setTime(1710000000000); // Ngày kết thúc

let diffMilliseconds = end.getTime() - start.getTime();
let diffDays = diffMilliseconds / (1000 * 60 * 60 * 24); // Đổi mili-giây thành ngày

console.log("Khoảng cách giữa hai ngày:", diffDays, "ngày");

Giải thích:

  • getTime() lấy timestamp của hai ngày.
  • Trừ hai timestamp để tính số mili-giây chênh lệch.
  • Chia cho 1000 * 60 * 60 * 24 để đổi mili-giây thành số ngày.

Thiết lập ngày tháng theo chuẩn UTC (Giờ quốc tế) trong JavaScript

Khi làm việc với ngày tháng trong JavaScript, thời gian thường được lưu trữ và xử lý theo UTC (Coordinated Universal Time) để tránh các vấn đề về múi giờ khi dữ liệu được sử dụng trên nhiều khu vực khác nhau. JavaScript cung cấp các phương thức setUTC* để thiết lập ngày tháng theo chuẩn UTC.

Các phương thức thiết lập ngày tháng theo UTC

Thiết lập năm theo UTC

let date = new Date();
date.setUTCFullYear(2025);
console.log("Năm theo UTC:", date.toUTCString());

Giải thích: setUTCFullYear(2025) thiết lập năm thành 2025 mà không ảnh hưởng đến tháng và ngày.

Thiết lập cả năm, tháng, ngày cùng lúc:

date.setUTCFullYear(2025, 5, 15); // 15 tháng 6 năm 2025 (tháng bắt đầu từ 0)
console.log("Thiết lập năm, tháng, ngày UTC:", date.toUTCString());

Thiết lập tháng theo UTC

let date = new Date();
date.setUTCMonth(11); // Tháng 12 (do tháng bắt đầu từ 0)
console.log("Tháng theo UTC:", date.toUTCString());

Nếu số tháng vượt quá 11, JavaScript tự động tăng năm.

Thiết lập ngày theo UTC

let date = new Date();
date.setUTCMonth(11); // Tháng 12 (do tháng bắt đầu từ 0)
console.log("Tháng theo UTC:", date.toUTCString());

Nếu số tháng vượt quá 11, JavaScript tự động tăng năm.

Thiết lập ngày theo UTC

let date = new Date();
date.setUTCDate(25); // Ngày 25 của tháng hiện tại
console.log("Ngày theo UTC:", date.toUTCString());

Nếu giá trị ngày vượt quá số ngày của tháng, JavaScript sẽ chuyển sang tháng tiếp theo.

Thiết lập giờ theo UTC

let date = new Date();
date.setUTCHours(15); // 15 giờ UTC
console.log("Giờ theo UTC:", date.toUTCString());

setUTCHours(hour, minute, second, millisecond) có thể đặt thêm phút, giây, mili-giây.

let date = new Date();
date.setUTCMinutes(45);
console.log("Phút theo UTC:", date.toUTCString());
Thiết lập giây theo UTC
let date = new Date();
date.setUTCSeconds(30);
console.log("Giây theo UTC:", date.toUTCString());

Kết bài

Các phương thức thiết lập ngày tháng trong JavaScript đóng vai trò quan trọng trong việc xử lý thời gian, giúp lập trình viên dễ dàng cập nhật, điều chỉnh và quản lý ngày giờ trong ứng dụng. Nhờ vào các phương thức như setFullYear(), setMonth(), setDate(), setHours(), setTime() và các phương thức UTC tương ứng, chúng ta có thể linh hoạt thay đổi thời gian theo yêu cầu, đồng bộ múi giờ và tối ưu trải nghiệm người dùng.

Việc nắm vững và sử dụng hiệu quả các phương thức này sẽ giúp bạn xây dựng những ứng dụng có khả năng hiển thị thời gian chính xác, hỗ trợ đặt lịch, thông báo, đếm ngược và đồng bộ hóa dữ liệu trên nhiều nền tảng. Khi làm việc với thời gian, hãy luôn lưu ý đến múi giờ và chuẩn hóa dữ liệu theo UTC để đảm bảo tính nhất quán trong hệ thống.

Bài viết liên quan

  • 2