PHP:为什么年份不减去日期?



下面的代码没有从日期中减去1年。为什么?

$date1 = '2021-06-02';
$date2 = new DateTime(date($date1, strtotime('-1 year')));
echo $date2->format('Y-m-d'); // outputs the same date 2021-06-02

您的部分问题是date函数的第一个参数是日期的格式。

https://www.php.net/manual/en/function.date.php

所以你正在创建一个日期字符串,格式为' 20121-06-02 '。

https://www.php.net/manual/en/datetime.format.php

它不使用你提供的时间戳中的任何东西,所以这个字符串被传递给DateTime的构造函数,并创建日期而不是前一年的日期。

请使用此代码。这对我来说总是很有效。

$date1 = '2021-06-02';
$date2 = date("Y-m-d", strtotime("-1 year", strtotime($date1)));
echo $date2; //Output 2020-06-02

日期时间对象:

$dt = new DateTime('2021-06-02');
$minusOneYearDT = $dt->sub(new DateInterval('P1Y'));
$minusOneYear = $minusOneYearDT->format('Y-m-d');    
echo $minusOneYear;

或者做一个小的解决方案:

$time = new DateTime('2021-06-02');
$newtime = $time->modify('-1 year')->format('Y-m-d');
echo $newtime;

你的代码有点混乱:

  • date()接受一个格式字符串和一个表示时间点的整数作为参数;然后应用该格式为该日期和时间创建一个字符串
  • strtotime()接受一个字符串,将其解释为时间点,并返回一个整数时间戳
  • new DateTime()接受一个字符串,strtotime可以接受的任何格式,但是创建一个对象表示而不是返回一个整数

你试图一次使用所有这些,结果弄得一团糟:

  • 你对date()的调用有一个第一个参数'2021-06-02',这不是一个有效的格式。
  • 你对strtotime()的调用有一个参数'-1 year',它将被解释为' 1年前',而不是相对于你指定的任何其他东西。
  • 使用这两个函数然后传递给new DateTime()并没有多大意义,因为对象可以做所有这些函数可以做的事情。

如果你想使用基于整数的函数,你可以这样写:

$date1 = '2021-06-02';
$date2 = strtotime("$date1 -1 year");
echo date('Y-m-d', $date2); 

如果你想使用基于对象的函数,你可以这样写:

$date1 = '2021-06-02';
$date2 = new DateTime("$date1 -1 year");
echo $date2->format('Y-m-d'); 

或者这个(注意使用DateTimeImmutable而不是DateTime来避免modify方法改变$date1对象:

$date1 = new DateTimeImmutable('2021-06-02');
$date2 = $date1->modify('-1 year');
echo $date2->format('Y-m-d'); 

相关内容

  • 没有找到相关文章

最新更新