Php 如果今年的日期已过,则从明年开始获取

Php 如果今年的日期已过,则从明年开始获取,php,php-carbon,Php,Php Carbon,我用碳做枣子。让我们以三月一日为例。默认情况下,Carbon返回当年的3月1日 //Returns current year value $date = Carbon::parse('first day of March'); 如果它在今年已经通过了,是否有可能从未来(明年)获得它,而不使用if条件 //Shorten this part $date = Carbon::parse('first day of March'); if ($date->lessThanOrEqualTo(C

我用碳做枣子。让我们以三月一日为例。默认情况下,Carbon返回当年的3月1日

//Returns current year value
$date = Carbon::parse('first day of March');
如果它在今年已经通过了,是否有可能从未来(明年)获得它,而不使用if条件

//Shorten this part
$date = Carbon::parse('first day of March');
if ($date->lessThanOrEqualTo(Carbon::now())) {
  $date->addYear();
}
$output = $date->format('d-m-Y');

Carbon只是PHP的DateTime类的包装器类

因此,这应该是可行的:

<?php

$date = new DateTime('2018-03-01');
$today = new DateTime();
if ($date < $today) {
    $date->modify('+1 year');
}
echo $date->format('d/m/Y');

也许不比你的方法更干净,但它不同,而且有效。
我创建一个包含所有相关日期的数组,包括今天、3月1日和明年3月1日,并对它们进行排序。
然后我在数组中用array_search查找“today”,并获取下一个值

$date = array(Carbon::parse('today'),Carbon::parse('first day of March'), Carbon::parse('first day of March + 1 year')); 
sort($date);
$date = $date[array_search(Carbon::parse('today'), $date)+1];
var_dump($date);

老实说,我认为这比if()慢,但它没有按照OP的要求使用if():-)

“…,如果它已经…-”没有使用if条件“OP发布的代码可以工作,但他/她不想使用if()三元是if。我有点希望更改字符串“三月的第一天”会有所帮助。“明年三月的第一天”之类的。
$date = array(Carbon::parse('today'),Carbon::parse('first day of March'), Carbon::parse('first day of March + 1 year')); 
sort($date);
$date = $date[array_search(Carbon::parse('today'), $date)+1];
var_dump($date);