laravel 检查是否有日期超过5年

c9x0cxw0  于 2023-01-27  发布在  其他
关注(0)|答案(3)|浏览(158)

我正在尝试找出实现某个目标的最佳方法。我正在遍历一些涉及一组日期的数据

foreach ($fields['dates'] as $key => $dates) {
    $fields['dates'][$key]['datestring'] = Carbon::createFromFormat(
        'dmY',
        $dates['datestring']
    );
    var_dump($fields['dates'][$key]['datestring']);
}

上面的var_dump会生成如下所示的内容

object(Carbon\Carbon)#330 (3) { ["date"]=> string(26) "2019-08-08 12:41:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } object(Carbon\Carbon)#328 (3) { ["date"]=> string(26) "1987-08-08 12:41:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }

在此之上,我创建了一个变量来标识是否至少有一个日期是5年前的,还为今天创建了一个date对象。

$moreThanFiveYears = false;
$now = Carbon::now();

现在我想弄清楚的是如何执行实际的检查?当我尝试上面的方法时,它会抱怨,因为$now与我的其他日期的格式不一样。我曾尝试向它添加一种格式,但它只生成类似20190219的内容,而不是原始日期生成的额外数据。
那么,如何循环所有日期以确保至少有一个日期大于5年呢?
谢谢

e37o9pze

e37o9pze1#

subYears()得到五年前的数据,然后用greaterThan()比较它们。

$fiveYearsAgo = Carbon::now()->subYears(5);

foreach ($fields['dates'] as $key => $dates) {
    $fields['dates'][$key]['datestring'] = Carbon::createFromFormat(
        'dmY',
        $dates['datestring']
    );

    if ($fields['dates'][$key]['datestring']->greaterThan($fiveYearsAgo)) {
        $moreThanFiveYears = false;
    }
}
h7appiyu

h7appiyu2#

试试这个。

<?
$check_date = '2019-12-18 18:20:40';
if(strtotime($check_date) < strtotime('-5 year')){
 echo "YES";
}else{
echo "NO";
}
?>
jjjwad0x

jjjwad0x3#

由于您使用的是碳,因此可以使用差值方法,该方法允许您轻松计算两个日期之间的差值(任何单位):

diffInSeconds()
diffInMinutes()
diffInHours()
diffInDays()
diffInYears()
# existing date
$old = Carbon::parse("2010-01-20 12:00:00");

# current date
$now = Carbon::now();

# find the difference
$diff = $old->diffInYears($now);

# test your difference
if($diff > 5) {
  echo "date is older than 5 years";
}
  • 注 *:由于您计算的是差异,因此比较对象的顺序并不重要-两种情况下的答案相同:
$diff = $old->diffInYears($now);
$diff = $new->diffInYears($old);

相关问题