Ngày trừ đi 1 năm?


91

Tôi có một ngày ở định dạng này:

2009-01-01

Làm thế nào để tôi quay lại cùng ngày nhưng sớm hơn 1 năm?


3
Đừng quên hướng đến vấn đề ngữ nghĩa về ý nghĩa của những năm nhuận "một năm". Trừ 365 ngày từ 2008-02-28 sẽ cho bạn 2007-02-28, trong khi trừ 365 ngày từ 2008-02-29 sẽ cho bạn 2007-03-31.
HostileFork nói không tin tưởng vào SE

Tôi đoán rằng nó phụ thuộc rất nhiều vào "trừ đi một năm" nghĩa là gì. Bạn có thể có cùng một tháng và ngày nhưng sớm hơn một năm hoặc tháng và ngày sau khi trừ đi 365 ngày như Hostile đã chỉ ra.
D.Shawley

Câu trả lời:


130

Bạn có thể sử dụng strtotime:

$date = strtotime('2010-01-01 -1 year');

Các strtotimehàm trả về một dấu thời gian unix, để có được một chuỗi định dạng, bạn có thể sử dụng date:

echo date('Y-m-d', $date); // echoes '2009-01-01'

99

Sử dụng hàm strtotime ():

  $time = strtotime("-1 year", time());
  $date = date("Y-m-d", $time);

51

Sử dụng đối tượng DateTime ...

$time = new DateTime('2099-01-01');
$newtime = $time->modify('-1 year')->format('Y-m-d');

Hoặc sử dụng ngay bây giờ cho ngày hôm nay

$time = new DateTime('now');
$newtime = $time->modify('-1 year')->format('Y-m-d');

31

một cách dễ dàng nhất mà tôi đã sử dụng và hoạt động tốt

date('Y-m-d', strtotime('-1 year'));

điều này làm việc hoàn hảo .. hy vọng điều này cũng sẽ giúp ai đó khác .. :)


9
// set your date here
$mydate = "2009-01-01";

/* strtotime accepts two parameters.
The first parameter tells what it should compute.
The second parameter defines what source date it should use. */
$lastyear = strtotime("-1 year", strtotime($mydate));

// format and display the computed date
echo date("Y-m-d", $lastyear);

6

Trên trang web của tôi, để kiểm tra xem người đăng ký có đủ 18 tuổi hay không , tôi chỉ cần sử dụng như sau:

$legalAge = date('Y-m-d', strtotime('-18 year'));

Sau đó, chỉ so sánh hai ngày.

Hy vọng nó có thể giúp một ai đó.


2

Mặc dù có nhiều câu trả lời được chấp nhận cho câu hỏi này, tôi không thấy bất kỳ ví dụ nào về subphương pháp sử dụng \Datetimeđối tượng: https://www.php.net/manual/en/datetime.sub.php

Vì vậy, để tham khảo, bạn cũng có thể sử dụng một \DateIntervalđể sửa đổi một \Datetimeđối tượng:

$date = new \DateTime('2009-01-01');
$date->sub(new \DateInterval('P1Y'));

echo $date->format('Y-m-d');

Trả về:

2008-01-01

Để biết thêm thông tin \DateInterval, hãy tham khảo tài liệu: https://www.php.net/manual/en/class.dateinterval.php


-3

Bạn có thể sử dụng hàm sau để trừ 1 hoặc bất kỳ năm nào cho một ngày.

 function yearstodate($years) {

        $now = date("Y-m-d");
        $now = explode('-', $now);
        $year = $now[0];
        $month   = $now[1];
        $day  = $now[2];
        $converted_year = $year - $years;
        echo $now = $converted_year."-".$month."-".$day;

    }

$number_to_subtract = "1";
echo yearstodate($number_to_subtract);

Và nhìn vào các ví dụ trên, bạn cũng có thể sử dụng

$user_age_min = "-"."1";
echo date('Y-m-d', strtotime($user_age_min.'year'));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.