Hầu như các bạn đều dễ bối rối khi làm việc với các biến thời gian, ngày tháng trong PHP, chuyển đổi qua lại giữa PHP và MySQL. Bài viết này tổng hợp các vấn đề như 1 check list để các bạn có thể tra cứu lúc cần.
I. Một số định nghĩa:
- Time zone là gì?
Time zone là múi giờ. Trái Đất được chia thành 24 múi giờ. Việt Nam nằm ở time zone +7. Một số quốc giá khác thì có thể có 2, 3 múi giờ khác nhau vì lãnh thổ rộng lớn.
- GMT là gì?
GMT (Greenwich Mean Time) là thời gian tính theo cái đồng hồ Royal Observatory ở Greenwich, UK.
- UTC là gì?
UTC là một hệ thống tính toán thời gian quốc tế hơn, giá trị chuẩn xác hơn và được sử dụng rộng rãi hơn trong lập trình.
- Timestamp là gì?
Timestamp là dấu thời gian. Timestamp để lưu dấu thời gian của 1 sự kiện trong quá trình máy tính xử lý dữ liệu. Timestamp thường được hiển thị dưới dạng ngày tháng năm giờ phút giây, ví dụ: “2022-12-17 14:32:05”.
II. Các loại dữ liệu DATE TIME trong MySQL:
- DATE: lưu trữ thông tin ngày tháng. Định dạng hiển thị: YYYY-MM-DD
- DATETIME: lưu trữ cả ngày tháng và thời gian. Định dạng: YYYY-MM-DD HH:MM:SS
- TIMESTAMP: sử dụng khi bạn cần giá trị lưu trữ thời gian. Định dạng hiển thị: HH:MM:SS
Sự khác biệt của DATETIME và TIMESTAMP là giá trị của TIMESTAMP được chuyển đổi từ múi giờ hiện tại sang UTC trong khi lưu trữ, và chuyển ngược lại từ UTC sang múi giờ hiện tại trong lúc lấy ra. Còn kiểu dữ liệu DATETIME thì không có gì thay đổi.
TIMESTAMP được sử dụng để theo dõi các thay đổi của bản ghi và cập nhật mỗi khi bản ghi được thay đổi. Còn DATETIME lưu trữ giá trị tĩnh và không ảnh hưởng bởi bất kỳ thay đổi nào trong bản ghi.
TIMESTAMP bị ảnh hưởng bởi cài đặt TIME ZONE, còn DATETIME thì không.
Ví dụ: bảng checkout(ID: INTEGER, Date1: DATETIME, Date2: TIMESTAMP). Khi update 1 bản ghi thì dữ liệu Date2 sẽ thay đổi, còn Date1 vẫn giữ nguyên. - YEAR: YEAR(2) và YEAR(4): năm.
III. Xử lý ngày tháng trong PHP:
Biến trong PHP linh hoạt và không định kiểu cho nên việc xử lý DATE TIME trong PHP và đồng bộ với MySQL khá nhập nhằng. Bạn cần lưu ý 1 số vấn đề sau:
1. Thiết lập time zone tại Việt Nam:
Đặt câu lệnh này ở đầu chương trình để đảm bảo time zone được thiết lập chính xác:
date_default_timezone_set('Asia/Ho_Chi_Minh');2. Hàm date() trong PHP:
date($format, $timestamp = time());Trong đó:
$formatlà định dạng.$timestamplà thời gian truyền vào (kiểu INT), mặc định nó sẽ lấy thời gian hiện tại (chính là hàmtime()).
3. Xử lý ngày tháng trong PHP:
- Chuyển đổi ngày tháng sang kiểu INT:
strtotime($time). Ví dụ:
echo strtotime(date('Y-m-d H:i:s'));- Hàm
mktime()trả về thời gian kiểu INT với tham số truyền vào:
mktime ($hour, $minute, $second, $month, $day , $year);Lưu ý hàm này trả về kiểu INT nên cần dùng hàm date() để format lại.
