Phương thức Date setMonth() trong JavaScript

Phương thức Date setMonth() trong JavaScript
Phương thức Date setMonth() trong JavaScript

Chức năng của Phương thức Date setMonth() trong JavaScript

Phương thức Date setMonth() trong JavaScript dùng để thay đổi giá trị của tháng trong đối tượng thời gian Date theo múi giờ địa phương, ngoài ra còn có thể thay đổi giá trị của phút.

Cú pháp của Phương thức Date setMonth() trong JavaScript

doituongdate.setMonth(giatrithang);

doituongdate: Đối tượng thời gian new Date();

giatrithang: là giá trị của tháng, giá trị 8 tức là tháng 9, bắt buộc nhập.

doituongdate.setMonth(giatrithang,giatringay);

doituongdate: Đối tượng thời gian new Date();

giatrithang: là giá trị của tháng, giá trị 8 tức là tháng 9, bắt buộc nhập.

giatringay: giá trị của ngày, không bắt buộc nhập.

Giá trị của tháng trong Phương thức Date setMonth() trong JavaScript

0: tháng 1

1: tháng 2

2: tháng 3

3: tháng 4

4: tháng 5

5: tháng 6

6: tháng 7

7: tháng 8

8: tháng 9

9: tháng 10

10: tháng 11

11: tháng 12

Code Phương thức Date setMonth() trong JavaScript

<script>
// Đổi tháng 8 thành tháng 9
document.write("<b>// Đổi tháng 8 thành tháng 9</b><br>");
var thoigian  = new Date(2025, 7, 21); // tháng 8
thoigian.setMonth(8); // Giá trị 8 dành cho tháng 9
document.write("Đổi tháng 8 thành tháng 9: "+thoigian+"<br>"); // Kết quả: Sun Sep 21 2025 00:00:00 GMT+0700 (Giờ Đông Dương)

// Đổi tháng 8 thành tháng 9, ngày 21 thành ngày 22
document.write("<b>// Đổi tháng 8 thành tháng 9, ngày 21 thành ngày 22</b><br>");
var thoigianhai  = new Date(2025, 7, 21); // tháng 8, ngày 21
thoigianhai.setMonth(8,22); // Giá trị 8 dành cho tháng 9
document.write("Đổi tháng 8 thành tháng 9, ngày 21 thành ngày 22: "+thoigianhai+"<br>"); // Kết quả: Mon Sep 22 2025 00:00:00 GMT+0700 (Giờ Đông Dương)

// Tạo tháng vượt giới hạn là 13
document.write("<b>// Tạo tháng vượt giới hạn là 13</b><br>");
var thoigianba  = new Date(2025, 7, 21); // tháng 8
thoigianba.setMonth(13); // Tạo tháng là 13 lớn hơn 11 là 2 nên năm đổi qua 2026 và tháng là tháng 2
document.write("Tạo tháng vượt giới hạn là 13: "+thoigianba+"<br>"); // Kết quả: Sat Feb 21 2026 00:00:00 GMT+0700 (Giờ Đông Dương)
</script>

Kết quả:

// Đổi tháng 8 thành tháng 9
Đổi tháng 8 thành tháng 9: Sun Sep 21 2025 00:00:00 GMT+0700 (Giờ Đông Dương)
// Đổi tháng 8 thành tháng 9, ngày 21 thành ngày 22
Đổi tháng 8 thành tháng 9, ngày 21 thành ngày 22: Mon Sep 22 2025 00:00:00 GMT+0700 (Giờ Đông Dương)
// Tạo tháng vượt giới hạn là 13
Tạo tháng vượt giới hạn là 13: Sat Feb 21 2026 00:00:00 GMT+0700 (Giờ Đông Dương)

Chạy Thử

Những tình huống dễ gặp khi sử dụng Date.setMonth()

Khi thay đổi tháng bằng setMonth(), kết quả không phải lúc nào cũng giống cách tính tháng trên lịch. Đặc biệt, nếu ngày hiện tại lớn hơn số ngày của tháng mới, đối tượng Date có thể tự động chuyển sang tháng tiếp theo. Hiểu rõ cơ chế này giúp tránh sai lệch khi xử lý ngày tháng trong JavaScript.

setMonth() xử lý ngày cuối tháng như thế nào?

setMonth() không tự động giữ ngày ở cuối tháng. Phương thức này cố gắng giữ nguyên ngày hiện tại, sau đó JavaScript tính lại ngày dựa trên số ngày thực tế của tháng mới.

Ví dụ, một ngày đang ở cuối tháng có thể tạo ra kết quả khác với mong đợi nếu tháng mới có ít ngày hơn. Đây là tình huống thường gặp khi thực hiện phép tính cộng hoặc trừ tháng bằng cách thay đổi trực tiếp giá trị của đối tượng Date.

const date = new Date(2026, 0, 31);
date.setMonth(1);

console.log(date);

Ở ví dụ trên, ngày ban đầu là 31/01/2026. Khi chuyển sang tháng 2, JavaScript vẫn cố gắng sử dụng ngày 31. Vì tháng 2 không có ngày này, phần ngày dư sẽ được cộng sang tháng kế tiếp. Do đó, không nên mặc định rằng gọi setMonth(1) trên ngày 31 luôn tạo ra một ngày thuộc tháng 2.

Thay đổi tháng khi ngày hiện tại không tồn tại trong tháng mới

Đây là trường hợp cần đặc biệt lưu ý khi xây dựng chức năng gia hạn, tính chu kỳ hoặc tạo mốc thời gian theo tháng. Nếu tháng đích không có ngày tương ứng, setMonth() sẽ thực hiện phép tính ngày theo quy tắc của đối tượng Date thay vì tự động lấy ngày cuối tháng.

Chẳng hạn, ngày 31 của một tháng được chuyển sang tháng chỉ có 30 ngày. Kết quả có thể vượt sang tháng tiếp theo. Điều này khiến phép tính kiểu “thêm một tháng” không phải lúc nào cũng tương đương với việc chọn cùng ngày ở tháng kế tiếp trên lịch.

Nếu nghiệp vụ yêu cầu giữ ngày trong tháng đích, cần kiểm tra số ngày của tháng trước khi thay đổi tháng. Cách này đặc biệt hữu ích với các trường hợp như lịch thanh toán định kỳ, ngày gia hạn dịch vụ hoặc lịch nhắc việc.

Cách tránh kết quả ngoài dự kiến khi cộng hoặc trừ nhiều tháng

Khi cộng hoặc trừ nhiều tháng liên tiếp, việc gọi setMonth() trực tiếp trên cùng một đối tượng Date có thể tạo ra kết quả khó dự đoán nếu ngày ban đầu nằm sát cuối tháng. Mỗi lần thay đổi tháng đều có thể làm ngày bị tràn sang tháng khác.

Để xử lý an toàn hơn, nên xác định rõ quy tắc nghiệp vụ: giữ nguyên ngày nếu có thể hay luôn đưa về ngày cuối cùng của tháng đích. Sau đó mới áp dụng setMonth() theo quy tắc đã chọn.

Với các phép tính tháng phức tạp, cũng nên hạn chế thay đổi trực tiếp một đối tượng Date đang được sử dụng ở nhiều nơi. Tạo một đối tượng ngày riêng cho phép tính sẽ giúp tránh việc kết quả của thao tác trước ảnh hưởng đến các phép tính sau.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Phương thức Date setMonth() trong JavaScript.

  • ★★★★★ ★★★★★
  • 0 Bình luận
CEO Bùi Tấn Lực | Founder Web Mới
Bùi Tấn Lực
Tìm hiểu về CEO Bùi Tấn Lực, Founder Web Mới với nhiều năm kinh nghiệm trong lĩnh vực phát triển website, SEO và chia sẻ kiến thức công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Phương thức Date setMonth() trong JavaScript
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !