ToolDeck

Máy Tính Ngày

Tính hiệu giữa hai ngày theo năm, tháng, ngày và nhiều đơn vị khác

Tính Toán Ngày Tháng Là Gì?

Tính toán ngày tháng là quá trình tìm hiệu giữa hai ngày trong lịch hoặc cộng/trừ một khoảng thời gian từ một ngày cho trước. Máy tính ngày trực tuyến giúp bạn xác định chính xác số ngày, tuần, tháng và năm giữa hai ngày bất kỳ mà không cần đếm thủ công. Nó được sử dụng trong lập kế hoạch dự án, pháp luật hợp đồng, kế toán tài chính và phát triển phần mềm.

Sự phức tạp của tính toán ngày tháng xuất phát từ cấu trúc không đều của lịch Gregorian. Các tháng có 28, 29, 30 hoặc 31 ngày. Năm có 365 hoặc 366 ngày tùy theo quy tắc năm nhuận. Phép trừ đơn giản các con số ngày sẽ cho kết quả sai khi các ngày thuộc các tháng hoặc năm khác nhau. Các thuật toán tính hiệu ngày tháng đúng chuẩn phải xử lý những bất thường này bằng cách duyệt qua từng đơn vị lịch riêng biệt.

Tính toán số học ngày tháng xuất hiện trong nhiều ngữ cảnh lập trình: tính thời gian hết hạn của token, lên lịch các sự kiện định kỳ, tính thời hạn SLA, hoặc đo thời gian đã trôi qua giữa các mục nhật ký. Trong quy trình DevOps, nó liên quan đến cửa sổ hiệu lực của chứng chỉ, thời gian đóng băng triển khai và độ dài chu kỳ trực. Dù hầu hết các ngôn ngữ cung cấp thư viện ngày tháng, một máy tính trên trình duyệt cho phép bạn kiểm tra nhanh mà không cần viết mã, cài đặt phụ thuộc hay mở REPL.

Tại Sao Dùng Máy Tính Ngày Này?

Nhận ngay kết quả phân tích khoảng thời gian giữa hai ngày bất kỳ, với kết quả hiển thị theo nhiều đơn vị cùng lúc. Không cần công thức, không cần mã, không cần đăng ký.

Kết Quả Tức Thì
Chọn hai ngày và xem hiệu theo năm, tháng, tuần, ngày, giờ và phút. Kết quả cập nhật ngay khi bạn thay đổi bất kỳ ngày nào.
🔒
Ưu Tiên Quyền Riêng Tư
Tất cả các phép tính chạy trong trình duyệt của bạn. Không có ngày nào được gửi đến bất kỳ máy chủ nào, và không có gì được lưu trữ hay ghi lại.
📅
Nhiều Đơn Vị Đầu Ra
Xem kết quả theo tất cả các đơn vị cùng một lúc: tổng số ngày, tuần, tháng và phân tích đầy đủ theo năm-tháng-ngày. Không cần tự chuyển đổi giữa các đơn vị.
🔢
Không Cần Tài Khoản
Sử dụng công cụ ngay lập tức. Không cần đăng nhập, không cần đăng ký, không có giới hạn sử dụng. Đánh dấu trang và sử dụng bất cứ khi nào bạn cần kiểm tra ngày nhanh.

Các Trường Hợp Sử Dụng Máy Tính Ngày

Phát Triển Frontend
Kiểm tra số ngày còn lại đến ngày ra mắt tính năng, xác minh logic bộ đếm ngược, hoặc kiểm thử các thành phần bộ chọn ngày so với các khoảng thời gian mong đợi.
Kỹ Thuật Backend
Xác thực cửa sổ hết hạn token, tính thời gian TTL cache, hoặc kiểm tra các khoảng thời gian của scheduled job có tạo ra ngày chạy tiếp theo đúng không.
DevOps & SRE
Đo khoảng cách giữa các mốc thời gian sự cố trong post-mortem, tính thời gian cảnh báo trước khi hết hạn chứng chỉ, hoặc xác định thời gian đóng băng triển khai trong các kỳ nghỉ lễ.
QA & Kiểm Thử
Tạo dữ liệu kiểm thử với các khoảng ngày cụ thể, xác minh logic kiểm tra tuổi bằng cách tính tuổi chính xác từ ngày sinh, hoặc xác nhận rằng các điều kiện biên ngày được xử lý đúng.
Quản Lý Dự Án
Tính thời gian sprint, đo số ngày làm việc giữa các mốc, hoặc ước tính thời gian giao hàng bằng cách đếm ngày theo lịch từ ngày bắt đầu.
Học Sinh & Học Tập
Đếm ngày đến kỳ thi, tính độ dài học kỳ, hoặc kiểm tra đáp án bài tập về nhà liên quan đến bài tập số học ngày tháng trong các khóa học khoa học máy tính.

Tham Chiếu Đơn Vị Thời Gian

Các phép tính hiệu ngày bao gồm các đơn vị có độ dài khác nhau. Tháng và năm không có độ dài cố định, đó là lý do tại sao phép chia đơn giản tổng số ngày có thể cho kết quả không chính xác. Bảng dưới đây liệt kê từng đơn vị và phạm vi của nó:

Đơn vịTương đươngGhi chú
1 year365 or 366 daysDepends on leap year
1 month28–31 daysVaries by month
1 week7 daysFixed
1 day24 hoursFixed (ignoring DST transitions)
1 hour3,600 secondsFixed
1 minute60 secondsFixed

Các Định Dạng Ngày Phổ Biến

Khi làm việc với ngày tháng theo cách lập trình, định dạng xác định cách một chuỗi ngày được phân tích. Sử dụng sai định dạng gây ra các lỗi âm thầm. ISO 8601 là lựa chọn an toàn nhất cho việc trao đổi dữ liệu vì nó không mơ hồ và hỗ trợ múi giờ. Bảng dưới đây liệt kê các định dạng bạn thường gặp nhất:

Định dạngVí dụSử dụng trong
ISO 86012026-04-10T14:30:00ZAPIs, databases, logs
RFC 2822Fri, 10 Apr 2026 14:30:00 +0000Email headers, HTTP
Unix timestamp1775831400Epoch-based systems
US format04/10/2026User-facing (US locale)
European format10.04.2026User-facing (EU locale)
Short ISO2026-04-10HTML date inputs, SQL DATE

Ví Dụ Mã: Tính Số Ngày Giữa Hai Ngày

Các ví dụ thực tế để tính hiệu giữa hai ngày trong JavaScript, Python, Go và dòng lệnh. Mỗi đoạn mã cho thấy cả phép tính tổng số ngày lẫn phân tích theo đơn vị lịch nơi ngôn ngữ hỗ trợ.

JavaScript
// Calculate days between two dates
const start = new Date('2026-01-15')
const end = new Date('2026-04-10')
const diffMs = end.getTime() - start.getTime()
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))
console.log(diffDays) // → 85

// Get year, month, day breakdown
function dateDiff(a, b) {
  let years = b.getFullYear() - a.getFullYear()
  let months = b.getMonth() - a.getMonth()
  let days = b.getDate() - a.getDate()
  if (days < 0) {
    months--
    days += new Date(b.getFullYear(), b.getMonth(), 0).getDate()
  }
  if (months < 0) { years--; months += 12 }
  return { years, months, days }
}
console.log(dateDiff(start, end)) // → { years: 0, months: 2, days: 26 }
Python
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta

start = date(2026, 1, 15)
end = date(2026, 4, 10)

# Total days
diff = (end - start).days
print(diff)  # → 85

# Year/month/day breakdown (requires python-dateutil)
rd = relativedelta(end, start)
print(f"{rd.years}y {rd.months}m {rd.days}d")  # → 0y 2m 26d

# Add 90 days to a date
future = start + timedelta(days=90)
print(future)  # → 2026-04-15
Go
package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Date(2026, 1, 15, 0, 0, 0, 0, time.UTC)
	end := time.Date(2026, 4, 10, 0, 0, 0, 0, time.UTC)

	// Total duration
	diff := end.Sub(start)
	days := int(diff.Hours() / 24)
	fmt.Println(days) // → 85

	// Add 90 days
	future := start.AddDate(0, 0, 90)
	fmt.Println(future.Format("2006-01-02")) // → 2026-04-15
}
CLI (GNU date / macOS)
# Days between two dates (GNU coreutils)
echo $(( ($(date -d "2026-04-10" +%s) - $(date -d "2026-01-15" +%s)) / 86400 ))
# → 85

# Add 90 days to a date (GNU date)
date -d "2026-01-15 + 90 days" +%Y-%m-%d
# → 2026-04-15

# macOS (BSD date) — add 90 days
date -j -v+90d -f "%Y-%m-%d" "2026-01-15" +%Y-%m-%d
# → 2026-04-15

Câu Hỏi Thường Gặp

Làm thế nào để tính số ngày giữa hai ngày?
Trừ ngày trước từ ngày sau để lấy hiệu tính bằng mili giây (hoặc kiểu thời gian gốc của ngôn ngữ), sau đó chia cho số mili giây trong một ngày (86.400.000). Kết quả là tổng số ngày đã trôi qua. Để phân tích theo lịch thành năm, tháng và ngày còn lại, bạn cần duyệt qua từng đơn vị riêng vì các tháng có độ dài khác nhau.
Hiệu ngày có tính ngày bắt đầu hay ngày kết thúc không?
Theo quy ước, hiệu ngày đếm số ngày giữa hai ngày, không tính một trong hai đầu. Nếu bạn chọn ngày 1 tháng 1 và ngày 2 tháng 1, kết quả là 1 ngày. Nếu trường hợp sử dụng của bạn yêu cầu đếm bao gồm cả hai đầu, hãy cộng thêm 1 vào kết quả. Công cụ này tuân theo quy ước không tính đầu cuối được hầu hết các ngôn ngữ lập trình sử dụng.
Năm nhuận được xử lý như thế nào trong tính toán ngày?
Năm nhuận thêm ngày 29 tháng 2, làm cho năm có 366 ngày thay vì 365. Quy tắc năm nhuận Gregorian là: chia hết cho 4, ngoại trừ các năm tròn thế kỷ, phải chia hết cho 400. Vì vậy 2024 và 2028 là năm nhuận, 1900 thì không, còn 2000 thì có. Các thuật toán tính hiệu ngày làm việc với đơn vị lịch (năm/tháng/ngày) xử lý điều này tự động. Các thuật toán chuyển đổi sang tổng số ngày phải tính đến ngày bổ sung khi phạm vi bao gồm ngày 29 tháng 2.
Sự khác biệt giữa ngày theo lịch và ngày làm việc là gì?
Ngày theo lịch tính mọi ngày bao gồm cả cuối tuần và ngày lễ. Ngày làm việc (còn gọi là ngày công tác) loại trừ thứ Bảy, Chủ Nhật và các ngày lễ công cộng. Công cụ này tính ngày theo lịch. Để chuyển đổi sang ngày làm việc gần đúng, hãy nhân tổng số ngày theo lịch với 5/7. Để đếm chính xác ngày làm việc, bạn cũng cần lịch nghỉ lễ cho khu vực pháp lý liên quan.
Tôi có thể tính ngày trong tương lai bằng cách cộng thêm ngày vào ngày bắt đầu không?
Có. Trong JavaScript, tạo một đối tượng Date và gọi setDate(getDate() + n). Trong Python, cộng timedelta(days=n) vào đối tượng date. Trong Go, dùng time.AddDate(0, 0, n). Công cụ này tập trung vào hiệu giữa hai ngày đã biết, nhưng bạn có thể dùng nó để kiểm tra phép tính của mình: nhập ngày bắt đầu và ngày kết quả mong đợi, sau đó xác nhận kết quả tổng số ngày khớp với khoảng bù bạn đã thêm.
Tại sao các công cụ khác nhau cho kết quả khác nhau về số tháng giữa hai ngày?
Tính toán tháng mơ hồ vì các tháng có độ dài khác nhau. Xét từ 31 tháng 1 đến 28 tháng 2: đó là 1 tháng hay 0 tháng và 28 ngày? Các thư viện khác nhau đưa ra lựa chọn khác nhau. Quy ước phổ biến nhất (được sử dụng bởi dateutil của Python, Period của Java và công cụ này) tính một tháng đầy đủ là đến cùng ngày trong tháng hoặc ngày hợp lệ cuối cùng của tháng ngắn hơn. Luôn kiểm tra quy ước mà thư viện của bạn sử dụng khi so sánh kết quả.
Tính toán ngày có bị ảnh hưởng bởi múi giờ không?
Khi bạn chọn ngày không có thành phần giờ (chỉ năm-tháng-ngày), phép tính độc lập với múi giờ vì nó hoạt động trên ngày theo lịch, không phải các thời điểm trong thời gian. Nếu bạn cần tính hiệu giữa hai thời điểm cụ thể (bao gồm giờ và múi giờ), bạn nên làm việc với các mốc thời gian ISO 8601 đầy đủ và chuyển đổi cả hai sang UTC trước khi trừ. Công cụ này chỉ hoạt động trên ngày theo lịch.