Tổng hợp các hàm Date và Time trong PHP

Tổng hợp các hàm Date và Time trong PHP

Khám phá đầy đủ các hàm Date và Time trong PHP như date(), time(), strtotime(), DateTime, date_diff(), timezone... kèm ví dụ thực tế, giúp xử lý ngày giờ chính xác và hiệu quả, chi tiết như nào hãy cùng chúng tôi phân tích:

Ngày và thời gian là một trong những kiểu dữ liệu xuất hiện trong hầu hết mọi ứng dụng web. Từ việc hiển thị thời gian đăng bài, tính thời hạn thanh toán, đếm ngược khuyến mãi, lưu lịch sử đăng nhập cho đến xử lý lịch hẹn, PHP đều cung cấp sẵn một hệ thống hàm rất mạnh để làm việc với Date & Time.

Nếu chỉ sử dụng một vài hàm như date() hoặc time(), bạn sẽ nhanh chóng gặp khó khăn khi cần cộng thêm ngày, so sánh thời gian, chuyển đổi múi giờ hay xử lý các định dạng khác nhau. Vì vậy, việc nắm được toàn bộ nhóm hàm liên quan sẽ giúp viết mã ngắn gọn, chính xác và dễ bảo trì hơn.

Bài viết dưới đây tổng hợp đầy đủ những hàm Date & Time thông dụng nhất trong PHP, giải thích chức năng, cách sử dụng và ví dụ thực tế để bạn có thể áp dụng ngay vào dự án.

Tổng hợp các hàm Date và Time trong PHP

Ngày và thời gian trong PHP hoạt động như thế nào?

PHP có hai cách làm việc với thời gian phổ biến:

  • Dựa trên Unix Timestamp (số giây tính từ 00:00:00 ngày 01/01/1970 UTC).
  • Dựa trên các đối tượng DateTime hiện đại.

Hầu hết các hàm truyền thống đều sử dụng Timestamp, trong khi các dự án mới thường ưu tiên DateTime vì linh hoạt hơn.

Các hàm lấy thời gian hiện tại

time()

Trả về Timestamp hiện tại của máy chủ.

<?php
echo time();
?>

Kết quả là một số nguyên đại diện cho số giây từ năm 1970 đến thời điểm hiện tại.

microtime()

Lấy thời gian với độ chính xác đến micro giây.

<?php
echo microtime(true);
?>

Hàm này thường dùng để đo tốc độ thực thi chương trình.

gettimeofday()

Trả về thông tin chi tiết về thời gian hiện tại.

<?php
print_r(gettimeofday());
?>

Phù hợp khi cần lấy nhiều thông tin thời gian trong một lần gọi.

Nhóm hàm định dạng ngày và giờ

date()

Đây là hàm được sử dụng nhiều nhất để chuyển Timestamp thành chuỗi dễ đọc.

<?php
echo date("d/m/Y");
?>

Kết quả:

24/07/2026

Có thể kết hợp nhiều ký tự định dạng khác nhau.

Ký tự Ý nghĩa
d Ngày có 2 chữ số
j Ngày không thêm số 0
m Tháng có 2 chữ số
n Tháng không thêm số 0
Y Năm 4 chữ số
y Năm 2 chữ số
H Giờ 24h
h Giờ 12h
i Phút
s Giây
l Tên thứ trong tuần
D Tên thứ viết tắt
F Tên tháng
M Tên tháng viết tắt

Ví dụ:

<?php
echo date("H:i:s d/m/Y");
?>

gmdate()

Định dạng thời gian theo chuẩn UTC thay vì múi giờ hiện tại.

<?php
echo gmdate("Y-m-d H:i:s");
?>

Chuyển đổi chuỗi thành Timestamp

strtotime()

Đây là một trong những hàm mạnh nhất của PHP vì có thể hiểu được ngôn ngữ thời gian.

<?php
echo strtotime("2026-08-15");
?>

Ngoài ngày cố định, hàm còn hiểu nhiều chuỗi tự nhiên.

<?php
echo date("d/m/Y", strtotime("+5 days"));
echo date("d/m/Y", strtotime("-2 weeks"));
echo date("d/m/Y", strtotime("next Monday"));
echo date("d/m/Y", strtotime("last Friday"));
?>

Nhờ đó việc tính toán ngày trở nên đơn giản hơn rất nhiều.

Tạo Timestamp theo ý muốn

mktime()

Tạo Timestamp từ giờ, phút, giây, tháng, ngày và năm.

<?php
$time = mktime(15,30,0,12,25,2026);
echo date("d/m/Y H:i",$time);
?>

gmmktime()

Tương tự mktime() nhưng sử dụng múi giờ GMT.

<?php
echo gmmktime(0,0,0,1,1,2026);
?>

Lấy thông tin chi tiết của một ngày

getdate()

Trả về một mảng chứa đầy đủ thông tin của Timestamp.

<?php
print_r(getdate());
?>

Kết quả bao gồm:

  • Ngày
  • Tháng
  • Năm
  • Thứ
  • Ngày trong năm
  • Timestamp

localtime()

Lấy thời gian địa phương dưới dạng mảng.

<?php
print_r(localtime());
?>

idate()

Lấy trực tiếp một thành phần của ngày dưới dạng số nguyên.

<?php
echo idate("m");
?>

Kết quả:

7

Kiểm tra tính hợp lệ của ngày

checkdate()

Giúp kiểm tra một ngày có tồn tại hay không.

<?php
if(checkdate(2,29,2024)){
    echo "Hợp lệ";
}
?>

Ví dụ ngày 30/02 sẽ trả về false.

Thiết lập múi giờ

Mặc định PHP sử dụng múi giờ được cấu hình trên máy chủ. Tuy nhiên, mỗi dự án nên chủ động thiết lập múi giờ để tránh sai lệch.

<?php
date_default_timezone_set("Asia/Ho_Chi_Minh");
echo date("H:i:s");
?>

Đây gần như là câu lệnh nên đặt ở đầu mọi dự án PHP.

Lấy thông tin múi giờ hiện tại

date_default_timezone_get()

Hàm này trả về tên múi giờ mà PHP đang sử dụng. Đây là cách nhanh nhất để kiểm tra cấu hình thời gian của máy chủ hoặc ứng dụng.

<?php
echo date_default_timezone_get();
?>

Kết quả có thể là:

Asia/Ho_Chi_Minh

Việc kiểm tra múi giờ đặc biệt hữu ích khi triển khai website lên VPS hoặc hosting mới, bởi mỗi môi trường có thể sử dụng cấu hình mặc định khác nhau.

Chuyển đổi Timestamp thành ngày giờ theo nhiều định dạng

strftime() (đã không còn khuyến nghị sử dụng)

Trong các phiên bản PHP cũ, strftime() được dùng để định dạng ngày theo thiết lập ngôn ngữ của hệ điều hành. Tuy nhiên từ PHP 8.1 hàm này đã bị đánh dấu không còn khuyến nghị sử dụng (deprecated).

<?php
echo strftime("%d/%m/%Y");
?>

Nếu phát triển dự án mới, bạn nên ưu tiên sử dụng DateTime hoặc date().

Chuyển đổi chuỗi ngày theo định dạng có sẵn

date_create()

Khởi tạo một đối tượng DateTime từ chuỗi ngày.

<?php
$date = date_create("2026-12-31");
print_r($date);
?>

Đây là điểm khởi đầu khi làm việc với hệ thống DateTime hướng đối tượng.

date_create_from_format()

Dùng khi chuỗi đầu vào không theo định dạng chuẩn.

<?php
$date = date_create_from_format("d/m/Y","24/07/2026");
echo date_format($date,"Y-m-d");
?>

Hàm này rất hữu ích khi dữ liệu được nhập từ biểu mẫu hoặc đọc từ tệp CSV.

Định dạng đối tượng DateTime

date_format()

Định dạng một đối tượng DateTime.

<?php
$date = date_create("2026-07-24");
echo date_format($date,"d/m/Y");
?>

Kết quả:

24/07/2026

Cộng và trừ thời gian

date_add()

Cộng thêm khoảng thời gian cho một đối tượng DateTime.

<?php
$date = date_create("2026-07-24");
date_add($date,date_interval_create_from_date_string("10 days"));
echo date_format($date,"d/m/Y");
?>

Sau khi thực hiện, ngày sẽ tăng thêm 10 ngày.

date_sub()

Trừ đi một khoảng thời gian.

<?php
$date = date_create("2026-07-24");
date_sub($date,date_interval_create_from_date_string("2 months"));
echo date_format($date,"d/m/Y");
?>

Việc cộng hoặc trừ tháng, năm bằng DateTime sẽ chính xác hơn nhiều so với tự tính bằng số giây.

Tính khoảng cách giữa hai thời điểm

date_diff()

Cho biết sự chênh lệch giữa hai đối tượng DateTime.

<?php
$date1 = date_create("2026-07-24");
$date2 = date_create("2026-08-15");

$diff = date_diff($date1,$date2);

echo $diff->days;
?>

Ngoài số ngày, đối tượng DateInterval còn chứa:

  • Số năm.
  • Số tháng.
  • Số ngày.
  • Số giờ.
  • Số phút.
  • Số giây.
  • Thông tin ngày âm hay dương.

Đây là phương pháp được sử dụng phổ biến để tính tuổi, số ngày còn lại hoặc thời hạn hợp đồng.

Thay đổi ngày hoặc giờ

date_modify()

Cho phép chỉnh sửa thời gian bằng chuỗi mô tả tự nhiên.

<?php
$date = date_create("2026-07-24");
date_modify($date,"+1 month");
echo date_format($date,"d/m/Y");
?>

Không chỉ hỗ trợ cộng ngày, hàm còn hiểu các chuỗi như:

  • next monday
  • last sunday
  • +2 weeks
  • -10 days
  • first day of next month
  • last day of this month

Lấy Timestamp từ đối tượng DateTime

date_timestamp_get()

<?php
$date = date_create();
echo date_timestamp_get($date);
?>

Hàm này giúp chuyển đổi từ DateTime sang Unix Timestamp.

date_timestamp_set()

Thiết lập Timestamp cho một đối tượng DateTime.

<?php
$date = date_create();
date_timestamp_set($date,1784851200);

echo date_format($date,"d/m/Y");
?>

Thay đổi ngày và giờ riêng biệt

date_date_set()

Thiết lập lại phần ngày, tháng và năm.

<?php
$date = date_create();

date_date_set($date,2027,1,1);

echo date_format($date,"d/m/Y");
?>

date_time_set()

Thiết lập lại phần giờ, phút và giây.

<?php
$date = date_create();

date_time_set($date,15,45,30);

echo date_format($date,"H:i:s");
?>

Thiết lập múi giờ cho đối tượng DateTime

date_timezone_set()

Đổi múi giờ của một đối tượng DateTime mà không cần thay đổi cấu hình toàn bộ hệ thống.

<?php
$date = date_create();

date_timezone_set(
    $date,
    timezone_open("Asia/Tokyo")
);

echo date_format($date,"Y-m-d H:i:s");
?>

Cách làm này phù hợp khi website cần hiển thị thời gian theo từng quốc gia.

date_timezone_get()

Lấy múi giờ đang gắn với đối tượng DateTime.

<?php
$date = date_create();

$timezone = date_timezone_get($date);

echo timezone_name_get($timezone);
?>

Danh sách múi giờ có sẵn

timezone_identifiers_list()

Trả về toàn bộ danh sách múi giờ mà PHP hỗ trợ.

<?php
print_r(timezone_identifiers_list());
?>

Danh sách này bao gồm hàng trăm múi giờ trên toàn thế giới như:

  • Asia/Ho_Chi_Minh
  • Asia/Tokyo
  • Asia/Bangkok
  • Europe/London
  • Europe/Paris
  • America/New_York
  • Australia/Sydney

Lấy thông tin chi tiết về múi giờ

timezone_name_get()

Hàm này trả về tên của một đối tượng múi giờ.

<?php
$timezone = timezone_open("Asia/Ho_Chi_Minh");

echo timezone_name_get($timezone);
?>

timezone_open()

Tạo một đối tượng DateTimeZone từ tên múi giờ.

<?php
$timezone = timezone_open("Asia/Ho_Chi_Minh");

print_r($timezone);
?>

timezone_location_get()

Lấy thông tin vị trí địa lý của một múi giờ.

<?php
$timezone = timezone_open("Asia/Ho_Chi_Minh");

print_r(timezone_location_get($timezone));
?>

Kết quả thường bao gồm:

  • Quốc gia.
  • Vĩ độ.
  • Kinh độ.
  • Vị trí địa lý.

timezone_offset_get()

Trả về độ lệch giữa múi giờ được chọn và UTC.

<?php
$timezone = timezone_open("Asia/Ho_Chi_Minh");
$date = date_create();

echo timezone_offset_get($timezone, $date);
?>

Đối với Việt Nam, giá trị thường là 25200 giây (UTC+7).

timezone_transitions_get()

Hiển thị lịch sử thay đổi múi giờ (DST - Daylight Saving Time) của một khu vực.

<?php
$timezone = timezone_open("Europe/London");

print_r(timezone_transitions_get($timezone));
?>

Việt Nam hiện không sử dụng giờ mùa hè, tuy nhiên hàm này rất hữu ích khi phát triển các hệ thống quốc tế.

timezone_version_get()

Cho biết phiên bản cơ sở dữ liệu múi giờ mà PHP đang sử dụng.

<?php
echo timezone_version_get();
?>

Làm việc với DateInterval

date_interval_create_from_date_string()

Tạo một đối tượng DateInterval từ chuỗi mô tả.

<?php
$interval = date_interval_create_from_date_string("30 days");

print_r($interval);
?>

Hàm này thường được kết hợp với date_add() hoặc date_sub().

date_interval_format()

Định dạng dữ liệu của đối tượng DateInterval.

<?php
$date1 = date_create("2026-01-01");
$date2 = date_create("2026-04-20");

$diff = date_diff($date1,$date2);

echo date_interval_format($diff,"%m tháng %d ngày");
?>

Làm việc với DateTimeImmutable

Ngoài lớp DateTime, PHP còn cung cấp DateTimeImmutable. Điểm khác biệt là sau mỗi lần thay đổi, đối tượng gốc sẽ không bị sửa mà tạo ra một đối tượng mới.

Điều này giúp hạn chế lỗi ngoài ý muốn khi cùng một đối tượng được sử dụng ở nhiều vị trí trong chương trình.

<?php
$date = new DateTimeImmutable("2026-07-24");

$newDate = $date->modify("+5 days");

echo $date->format("d/m/Y");
echo $newDate->format("d/m/Y");
?>

Một số tình huống thực tế khi xử lý Date & Time

Hiển thị ngày hiện tại

<?php
echo date("d/m/Y");
?>

Hiển thị cả ngày và giờ

<?php
echo date("d/m/Y H:i:s");
?>

Lấy thứ trong tuần

<?php
echo date("l");
?>

Tính ngày sau 30 ngày

<?php
echo date("d/m/Y", strtotime("+30 days"));
?>

Tính ngày trước 1 năm

<?php
echo date("d/m/Y", strtotime("-1 year"));
?>

Tính số ngày còn lại đến một mốc thời gian

<?php
$today = new DateTime();

$deadline = new DateTime("2026-12-31");

$diff = $today->diff($deadline);

echo $diff->days;
?>

Kiểm tra năm nhuận

<?php
$year = date("Y");

if(date("L", strtotime($year . "-01-01"))){
    echo "Năm nhuận";
}else{
    echo "Không phải năm nhuận";
}
?>

Lấy ngày cuối cùng của tháng

<?php
echo date("t");
?>

Giá trị trả về là số ngày của tháng hiện tại, ví dụ 28, 29, 30 hoặc 31.

Những lỗi thường gặp khi làm việc với Date & Time trong PHP

  • Không thiết lập múi giờ khiến thời gian hiển thị sai so với quốc gia sử dụng.
  • So sánh trực tiếp chuỗi ngày thay vì Timestamp hoặc DateTime.
  • Dùng số giây để cộng tháng hoặc năm, dẫn đến sai lệch ở năm nhuận và các tháng có số ngày khác nhau.
  • Không kiểm tra tính hợp lệ của ngày nhập bằng checkdate().
  • Sử dụng strftime() trong các phiên bản PHP mới dù hàm đã không còn được khuyến nghị.
  • Lưu ngày theo nhiều định dạng khác nhau trong cơ sở dữ liệu, gây khó khăn khi truy vấn và sắp xếp.

Kinh nghiệm sử dụng Date & Time hiệu quả

  • Thiết lập múi giờ ngay khi khởi tạo ứng dụng.
  • Lưu dữ liệu trong cơ sở dữ liệu theo định dạng DATETIME hoặc TIMESTAMP chuẩn.
  • Ưu tiên sử dụng lớp DateTime hoặc DateTimeImmutable cho các dự án mới.
  • Chỉ định dạng ngày khi hiển thị ra giao diện, không lưu dữ liệu dưới dạng chuỗi đã định dạng.
  • Sử dụng date_diff() để tính khoảng cách thời gian thay vì tự tính bằng số giây.
  • Kết hợp strtotime() với các chuỗi tự nhiên để giảm lượng mã cần viết.
  • Kiểm tra múi giờ khi triển khai website sang máy chủ mới để tránh sai lệch dữ liệu.

Tổng kết

Hệ thống Date & Time của PHP cung cấp đầy đủ công cụ để xử lý từ những tác vụ đơn giản như hiển thị ngày hiện tại cho đến các yêu cầu phức tạp như tính khoảng thời gian, quản lý múi giờ, chuyển đổi định dạng hay thao tác với đối tượng DateTime. Việc hiểu rõ chức năng của từng hàm sẽ giúp mã nguồn ngắn gọn hơn, hạn chế sai sót và dễ mở rộng khi xây dựng các ứng dụng web thực tế.

Đối với các dự án PHP hiện đại, nên ưu tiên sử dụng DateTime, DateTimeImmutable cùng các hàm hỗ trợ như date_diff(), date_modify()date_create_from_format(). Trong khi đó, những hàm truyền thống như date(), time()strtotime() vẫn là những công cụ quan trọng, phù hợp với hầu hết các nhu cầu xử lý ngày giờ trong thực tế.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Chia sẻ nội dung đánh giá của bạn về Tổng hợp các hàm Date và Time trong PHP
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
Đăng ký tư vấn thiết kế website
Tìm hiểu 1 năm không bằng lắng nghe 1 câu tư vấn