Các hàm xử lý ngày giờ trong MySQL: Lấy thời gian hiện tại, định dạng, trích xuất và tính toán

Lấy ngày và giờ hiện tại

MySQL cung cấp một số hàm để lấy giá trị ngày giờ tại thời điểm thực thi:

  • NOW(): Trả về ngày và giờ hiện hành dưới dạng DATETIME.
  • CURDATE(): Chỉ trả về phần ngày hiện tại.
  • CURTIME(): Trả về phần thời gian hiện tại.
SELECT NOW() AS thoi_gian_hien_tai, 
       CURDATE() AS ngay_hien_tai, 
       CURTIME() AS gio_hien_tai;

Định dạng ngày giờ

Hàm DATE_FORMAT() cho phép chuyển đổi giá trị ngày thành chuỗi theo định dạng mong muốn. Ngược lại, STR_TO_DATE() dùng để phân tích chuỗi văn bản thành kiểu ngày hợp lệ.

  • %Y: Năm 4 chữ số (ví dụ: 2024)
  • %m: Tháng với 2 chữ số
  • %d: Ngày với 2 chữ số
  • %H: Giờ 24h
  • %i: Phút
  • %s: Giây
-- Định dạng ngày giờ
SELECT DATE_FORMAT(NOW(), '%d/%m/%Y %H:%i:%s') AS dinh_dang_vn;

-- Chuyển chuỗi thành ngày
SELECT STR_TO_DATE('18/09/2024', '%d/%m/%Y') AS chuyen_doi_ngay;

Trích xuất thành phần ngày giờ

Bạn có thể tách riêng từng phần của giá trị ngày/giờ bằng các hàm chuyên biệt:

  • YEAR(), MONTH(), DAY(): Lấy năm, tháng, ngày.
  • HOUR(), MINUTE(), SECOND(): Lấy giờ, phút, giây.
SELECT YEAR('2024-09-18 14:35:20') AS nam,
       MONTH('2024-09-18 14:35:20') AS thang,
       DAY('2024-09-18 14:35:20') AS ngay,
       HOUR('2024-09-18 14:35:20') AS gio;

Tính toán với khoảng thời gian

MySQL hỗ trợ các thao tác cộng/trừ khoảng cách thời gian bằng:

  • DATE_ADD() và DATE_SUB(): Thêm hoặc bớt một đơn vị thời gian.
  • TIMESTAMPADD(): Tương tự DATE_ADD nhưng cú pháp khác.
  • TIMESTAMPDIFF(): Tính chênh lệch giữa hai mốc thời gian theo đơn vị chỉ định.
-- Cộng thêm 7 ngày
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY) AS cong_7_ngay;

-- Trừ đi 2 giờ
SELECT DATE_SUB(NOW(), INTERVAL 2 HOUR) AS tru_2_gio;

-- Tính số ngày giữa hai ngày
SELECT TIMESTAMPDIFF(DAY, '2024-09-01', '2024-09-18') AS so_ngay;

Một số hàm tiện ích khác

  • LAST_DAY(date): Trả về ngày cuối cùng của tháng chứa date.
  • UNIX_TIMESTAMP(): Chuyển đổi ngày thành Unix timestamp (số giây từ 01/01/1970).
  • FROM_UNIXTIME(): Chuyển ngược từ timestamp sang định dạng ngày giờ.
  • EXTRACT(): Trích xuất thành phần như năm-tháng, tuần, quý… từ giá trị ngày.
SELECT LAST_DAY('2024-02-01') AS ngay_cuoi_cung,
       UNIX_TIMESTAMP(NOW()) AS timestamp_hien_tai,
       EXTRACT(QUARTER FROM NOW()) AS quy_hien_tai;

So sánh và chuyển đổi ngày giờ

Hàm DATEDIFF() tính số ngày chênh lệch giữa hai ngày (không tính phần giờ). Các hàm DATE() và TIME() giúp tách riêng phần ngày hoặc giờ từ giá trị DATETIME.

SELECT DATEDIFF('2024-10-01', '2024-09-01') AS khoang_cach_ngay,
       DATE('2024-09-18 15:30:45') AS chi_lay_ngay,
       TIME('2024-09-18 15:30:45') AS chi_lay_gio;

Chuyển đổi múi giờ và tạo ngày

  • CONVERT_TZ(): Đổi múi giờ của một giá trị thời gian (cần cấu hình thông tin múi giờ trong MySQL).
  • MAKE_DATE(): Tạo giá trị ngày từ ba tham số năm, tháng, ngày.
-- Chuyển từ UTC sang múi giờ +07:00 (Giờ Việt Nam)
SELECT CONVERT_TZ(NOW(), '+00:00', '+07:00') AS gio_VN;

-- Tạo ngày từ các thành phần
SELECT MAKE_DATE(2024, 12, 25) AS ngay_le;

Thẻ: mysql date function Datetime time zone TIMESTAMPDIFF

Đăng vào ngày 1 tháng 10 lúc 14:34