Các tính năng hữu dụng của đối tượng DateTime trong PHP

blogphp16 thg6 2019
PHP

So Sánh Ngày Tháng

Giả sử bạn cần so sánh hai ngày được lấy từ dữ liệu input trong form gửi tới server. Và thông thường các dữ liệu này thường được gửi dưới dạng chuỗi:

$date1= "26-11-2017";
$date2= "07-12-2017";

Lúc này nếu như so sánh trực tiếp:

var_dump($date1 > $date2); // true

Thì kết quả nhận được sẽ không chính xác. Để so sánh hai dữ liệu ngày tháng dạng chuỗi chúng ta cần chuyển về kiểu dữ liệu DateTime trong PHP trước:

$date1= "26-11-2017";
$date2= "07-12-2017";

$myDateTime1 = new DateTime($date1);
$myDateTime2 = new DateTime($date2);

var_dump($myDateTime1 > $myDateTime2); // false

Hiển Thị Theo Format

Cần hiển thị một ngày tháng lưu theo dạng chuỗi từ format này sang format khác, ví dụ như chuỗi đã cho là:

$date= "26-11-2017";

Và giờ cần hiển thị về format dạng: thứ trong tuần -> theo sau bởi ngày -> theo sau bởi tháng và theo sau bởi năm.

Vâng và khi nhận được yêu cầu như vậy thì rất nhiều dev đã ngay lập tức vật lộn trên Google để tìm ra thư viện hỗ trợ thực hiện thao tác này!? Không cần thư viện nào cả vì trong đối tượng DateTime đã cung cấp sẵn phương thức format() để chúng ta làm điều này rồi:

$date= "26-11-2017";

$myDate = new DateTime($date);
echo $myDate->format("l d, m, Y"); // Sunday 26, 11, 2017

Đơn giản như ăn bánh phải không nào.

Và nếu như bạn muốn thêm tiếp vị ngữ trước số ngày như đã từng học trong môn tiếng Anh:

echo $myDate->format("l dS, M, Y"); // Sunday 26th, Nov, 2017

Quá easy phải không nào :)

Cài Đặt Timezone

Sử dụng Timezone là điều cần thiết đặc biệt khi làm việc với ngày giờ (lưu ý là ở đây có thêm cả giờ nữa) vì timezone không phải lúc nào cũng giống nhau. Ví dụ code của bạn chạy ở môi trường server được đặt theo múi giờ Việt Nam nhưng khách hàng sử dụng ứng dụng lại đang ở Singapore chẳng hạn.

Để cài đặt múi giờ chúng ta có thể sử dụng phương thức setTimezone() của DateTime kết hợp với đối tượng DateTimeZone:

$date = new DateTime('2013-12-01');
$date->setTimezone(new DateTimeZone('Asia/Ho_Chi_Minh'));
echo $date->format('Y-m-d H:i:s');

Bạn có thể vào địa chỉ http://php.net/manual/en/timezones.asia.php để xem danh sách các timezone sử dụng trong PHP.

Chỉnh Sửa Ngày

Bạn có một chuỗi ngày tháng, ví dụ như là 26-11-2017, giờ cần biết một tuần sau sẽ là ngày nào thì phải làm sao?

$date= "26-11-2017";

$myDate = new DateTime($date);

$myDate->modify("+7 days");

echo $myDate->format("l, d, m, Y"); // Sunday 03rd, 12, 2017

Đơn giản vậy sao? Đúng thế và không chỉ có vậy bạn còn có thể thử với các câu lệnh sau:

$myDate->modify("+1 week");
$myDate->modify("+1 month");
$myDate->modify("next week");
$myDate->modify("next month");
$myDate->modify("tomorrow");

Và tất nhiên có cộng thì cũng có trừ:

$myDate->modify("-30 days");
$myDate->modify("yesterday");
$myDate->modify("previous month");
$myDate->modify("last month");

Có ngày thì cũng có giờ có phút:

$date= "26-11-2017 06:00:00";

$myDate = new DateTime($date);

echo $myDate->format("H:m:s  dS, m, Y");

$myDate->modify("+1 hour");

echo $myDate->format("s:m:H  dS, m, Y");

Nếu như bạn ưa chuộng code theo kiểu functional thì có thể dùng hàm date_modify().

Ngày Cuối Cùng Của Tháng

Cuối cùng thì bạn cũng có thể sử dụng phương thức modify() để nhanh chóng lấy ra ngày của tháng.

$date = new DateTime('now');
$date->modify('last day of this 

Gửi bài viết tới Facebook

Gửi hình ảnh