Dùng Intl thay vì tự viết hàm chèn dấu chấm và ghép chuỗi ngày.
js
const vnd = new Intl.NumberFormat('vi-VN', {
style: 'currency', currency: 'VND',
})
vnd.format(1250000) // "1.250.000 ₫"
const dt = new Intl.DateTimeFormat('vi-VN', {
dateStyle: 'short', timeStyle: 'short', timeZone: 'Asia/Ho_Chi_Minh',
})
dt.format(new Date()) // "06/08/2026 09:15"Những chi tiết hay bị hỏi tiếp:
- VND không có phần thập phân —
Intltự biết điều đó, còn hàm tự viết thường in ra ".00" thừa. - Định dạng số của Việt Nam ngược với tiếng Anh: dấu chấm ngăn nhóm nghìn, dấu phẩy cho thập phân. Tự thay ký tự bằng
replacerất dễ sai với số âm hoặc số thập phân. - Timezone.
new Date(...)hiển thị theo múi giờ của máy người dùng. Server nên trả ISO 8601 có offset (2026-08-06T09:15:00+07:00) và client chỉ địnhtimeZonekhi cần cố định giờ Việt Nam — nếu không, khách xem từ nước ngoài sẽ thấy giờ khác. - Tạo formatter một lần và tái sử dụng; khởi tạo
Intl.NumberFormattrong vòng lặp render là thao tác tốn kém. - Với thời gian tương đối ("2 giờ trước") dùng
Intl.RelativeTimeFormat, đừng tự viết bảng số nhiều. - Tiền tệ dùng để tính toán nên lưu bằng số nguyên đồng, không lưu bằng số thực rồi làm tròn khi hiển thị.