日期减去1年?


91

我有一个这样的日期:

2009-01-01

如何返回一年前的同一日期?


3
不要忘记倾向于to年的“一年”这一语义问题。从2008-02-28减去365天将为您提供2007-02-28,而从2008-02-29减去365天将为您提供2007-03-31。
HostileFork说不要相信2010年

我想这很大程度上取决于“减去一年”的含义。您可能指的是同一个月和一天,但比一年前更早,也可能是减去敌对行动指出的365天后的一个月和一天。
D.Shawley's

Answers:



99

使用strtotime()函数:

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

51

使用DateTime对象...

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

或今天使用

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

31

我使用并运作良好的最简单方法

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

这很完美..希望这也会对其他人有所帮助.. :)


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

在我的网站上,要检查注册者是否年满18岁,我仅使用了以下内容:

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

之后,仅比较两个日期。

希望它可以帮助某人。


2

尽管对此问题有许多可接受的答案,但我看不到sub使用该\Datetime对象的方法的任何示例:https : //www.php.net/manual/zh/datetime.sub.php

因此,作为参考,您也可以使用\DateInterval来修改\Datetime对象:

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

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

哪个返回:

2008-01-01

有关的更多信息\DateInterval,请参阅文档:https : //www.php.net/manual/zh/class.dateinterval.php


-3

您可以使用以下功能从日期中减去1或任何年份。

 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);

在上面的示例中,您还可以使用以下示例

$user_age_min = "-"."1";
echo date('Y-m-d', strtotime($user_age_min.'year'));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.