【问题标题】:Carbon format only years and days with leap year碳格式只有闰年的年和日
【发布时间】:2021-03-09 12:54:49
【问题描述】:

我正在尝试获取 2 个日期之间的差异,但只有 年和日,但要添加月到日,例如:

$date1 = \Carbon\Carbon::parse(02.02.2021); 
$date2 = \Carbon\Carbon::parse(01.01.2000);
$date2->diff($date1)->format('Y d');

但是如果我使用不带月份的格式,它将被省略并且不会添加到天。

21 years, 1 day

但真实的是

21 years, 1 month, 1 day

所以我想举例

21 years, 32 days

所以我做到了:

$days = $date2->diffInDays($date1)
$years = intval($days/ 365);
$days_minusYears = $days % 365;

$diff = "$years"."y"." $days_minusYears"."d",

不幸的是,它将跳过闰年。 如何正确操作?

【问题讨论】:

  • 您首先要具体了解“将数月添加到数天”的实际含义。从您给出的示例中,听起来您刚刚添加了 30 天 - 但不是每个月 30 天,所以如果您只选择月数乘以 30,恕我直言,您不太可能得到任何明智的结果.
  • @CBroe 不会将月份和日期相乘。计算天数,不包括年份。我只想要不包括几年后的天数。
  • 请发布一个可重现的示例。 $dep 在您的第一个示例中不存在。
  • @jspit 帖子已修复
  • @Davidos 一月总是有 31 天。那么从1月1日到2月2日是32天。预期结果必须是 21 年零 32 天。

标签: php laravel date php-carbon


【解决方案1】:

看看这个

$date1 = Carbon::parse("02.02.2021");
$date2 = Carbon::parse("01.01.2000");

首先获取两个日期之间的年差

$y = $date2->diff($date1)->y;
        

一旦你得到年份加上那些年份,你将有 2 个当年的日期, 当您使用 Carbon 获得当年的天数时,您将获得正确的天数

 $date3= $date2->addYears($y);       
 

完整代码

    $date1 = Carbon::parse("02.02.2021");
    $date2 = Carbon::parse("01.01.2000");
    
    $years_total = $date2->diff($date1)->y;
    $date3= $date2->addYears($years_total); //2021-01-01 using above example
    $days_excluding_years = ($date3->diff($date1)->days);
    echo $years_total ." Years ". $days_excluding_years ." days";

【讨论】:

  • 一个好的答案应该包括解释它是如何工作的以及为什么它可以解决问题,以便 OP 和任何未来的读者都可以从中学习。
  • 我不想把年数加到天数上。我想得到不包括年份的年份和日子。
  • 请问没有年份的年份和日子是什么?您是否尝试过来自@Teekay 的代码 sn-p?来自我的 +1。
  • @Davidos 使用 ($date3->diff($date1)->days)-1 方法,您将获得 $y 中的年份和不包括年份的天数
  • @Davidos 感谢指正,无需加-1
【解决方案2】:

与不含碳的 DateTime 相同的解决方案。

//Diff in Years and Days (not Month)
$date1 = date_create("01.01.2000");
$date2 = date_create("02.02.2021");
$years = $date1->diff($date2)->y;
$days = $date1->modify($years." years")->diff($date2)->days;

echo $years." Years and ".$days." Days"; 
// 21 Years and 32 Days

Try it yourself in the sandbox.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多