Menu
CoddyTech

Chỉnh sửa đối tượng DateTime

Thuộc phần Logic và luồng chương trình trong hành trình PHP của Coddy. Bài học 50 trên 68.

Sau khi có một đối tượng DateTime, bạn thường cần thay đổi nó để biểu thị một thời điểm khác. Phương thức modify() cho phép bạn cộng hoặc trừ thời gian trong đối tượng DateTime bằng các cụm từ ngôn ngữ tự nhiên, giúp việc tính toán ngày tháng trở nên trực quan và dễ đọc.

Phương thức modify() chấp nhận các chuỗi cùng kiểu với những chuỗi dùng được trong strtotime(), chẳng hạn như '+1 day', '-2 weeks' hoặc 'next Friday'. Khác với việc tạo đối tượng mới mỗi lần, phương thức này sửa đổi trực tiếp đối tượng DateTime hiện có, giúp xử lý các thao tác ngày tháng liên tiếp hiệu quả hơn.

<?php
$date = new DateTime();
echo $date->format('Y-m-d');  // Ngày hôm nay

$date->modify('+1 week');
echo $date->format('Y-m-d');  // Một tuần sau hôm nay

$date->modify('-3 days');
echo $date->format('Y-m-d');  // 4 ngày sau hôm nay
?>

Cách này giúp bạn linh hoạt hơn khi tính toán ngày tháng. Bạn có thể kết hợp nhiều phép điều chỉnh hoặc dùng các biểu thức phức tạp như '+2 months -1 day' để thực hiện các phép tính ngày tháng nâng cao mà vẫn giữ cho code rõ ràng và dễ bảo trì.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận hai đầu vào: một chuỗi ngày giờ theo định dạng Y-m-d H:i:s và một chuỗi biểu thị thay đổi. Đầu vào thứ nhất là một ngày giờ cụ thể (ví dụ: 2024-03-15 14:30:25), còn đầu vào thứ hai là một biểu thức thay đổi như +1 week, -3 days hoặc +2 months.

Đọc cả hai đầu vào, tạo một đối tượng DateTime bằng chuỗi ngày giờ, dùng phương thức modify() để áp dụng biểu thức thay đổi cho đối tượng DateTime, rồi in ngày giờ đã thay đổi theo định dạng Y-m-d H:i:s.

Định dạng đầu vào:

  • Dòng thứ nhất: Một chuỗi ngày giờ theo định dạng Y-m-d H:i:s (ví dụ: 2024-03-15 14:30:25)
  • Dòng thứ hai: Một chuỗi biểu thị thay đổi (ví dụ: +1 week, -3 days hoặc +2 months)

Đầu ra mong đợi: Ngày giờ đã thay đổi, được định dạng theo Y-m-d H:i:s

Tự làm thử

<?php
// Đọc chuỗi ngày tháng
$dateString = trim(fgets(STDIN));

// Đọc chuỗi điều chỉnh
$modificationString = trim(fgets(STDIN));

// TODO: Viết code bên dưới
// Tạo đối tượng (object) DateTime, áp dụng điều chỉnh và định dạng kết quả


// In ra ngày tháng sau khi điều chỉnh
echo $modifiedDate;
?>
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch PHP online