【问题标题】:Comparing two dates in blade.php file比较 Blade.php 文件中的两个日期
【发布时间】:2017-08-28 12:55:58
【问题描述】:

我必须比较 list.blade.php 中的两个日期,例如

如果今天的日期大于或等于到期日,则做其他事情。

代码如下:

@php
use Carbon\Carbon;
$today_date = Carbon::today();
@endphp

@foreach ($entries as $k => $entry)
@if($today_date >= $entry->expire_date)
// do something
@else 
// do something
@endif
@endforeach

日期格式:YYYY-MM-DD

但这不起作用。

请帮忙

谢谢

编辑:

我试过了:

<?php
    use Carbon\Carbon;
    $today_date = Carbon::now();

    foreach ($entries as $k => $entry) {
        $expire_date = Carbon::createFromFormat('Y-m-d', $entry->expire_date);
    }
?>

它给了我这样的错误: image

expire_date 的另一件事是我的数据库中的文本类型,所以这可能是问题所在。

【问题讨论】:

  • expire_date 在您的数据库中是日期时间格式吗?它是否在您的控制器中标记为时间戳?
  • 没有 expire_date 是文本。
  • 如何在刀片文件中将 expire_date 转换为日期。你能帮忙吗

标签: php laravel date laravel-backpack


【解决方案1】:
@php
    use Carbon\Carbon;
    $today_date = Carbon::now();

    foreach ($entries as $k => $entry) {
        $expire_date = Carbon::createFromFormat('Y-m-d', $entry->expire_date);
        $data_difference = $today_date->diffInDays($expire_date, false);  //false param

        if($data_difference > 0) {
            //not expired
        }
        elseif($data_difference < 0) {
            //expired
        } else {
            //today
        }
    }

@endphp

false 参数是可选的,表示如果传入的日期小于当前实例,您希望返回值是绝对值还是可能带有 -(负)号的相对值。这将默认为true,返回绝对值。

More here

【讨论】:

  • 如果我想使用这个 data_difference,它会在计算两个日期之间的差异时忽略“-”符号。所以 if 条件是行不通的。
  • 谢谢您,先生,我不能赞成您的回答,因为我的声誉不足以这样做,但这很有帮助。
  • 很高兴我能帮上忙。 :)
【解决方案2】:

使用这个 => Carbon::now();

并将您的日期格式化为您的格式(YYYY-MM-DD)。将该日期存储在 var 中并将该 var 与到期日期进行比较。

您的 today_date 格式存在问题。

tod​​ay_date 同时给出日期和时间。

【讨论】:

  • 我尝试了 Carbon::now 但没有成功,你能否用一个例子详细说明你答案的第二部分,当你说今天日期的格式时我无法得到你
  • $today_date->format('YYYY-MM-DD') 在使用 $today_date 之前使用它。确保两个日期格式相同。
【解决方案3】:

由于 expire_date 是文本,您需要对其进行转换。幸运的是,有了Carbon,这很容易做到:

$expire_date = Carbon::createFromFormat('Y-m-d', $entry->expire_date);

那你就可以用compare

@if($today_date->gte($expire_date))

您可能需要确保$expire_date 不为空并且不会首先抛出任何错误。如果您将日期作为日期或日期时间列存储在数据库中,以确保其始终采用正确的格式,您还可以将其作为时间戳添加到模型中,或者将 Carbon 应用为 @ 987654322@.

【讨论】:

  • 这个 $expire_date 可以在刀片文件中的 php 标签之外访问吗?
  • 可以,只要您在刀片文件中进行设置。否则,您可以在控制器中转换它,或者在您的模型中使用访问器函数。
  • 你想让我试试这个吗? ` @php 使用碳\碳; $today_date = 碳::now(); @endphp @foreach ($entries as $k => $entry) $expire_date = Carbon::createFromFormat('Y-m-d', $entry->expire_date); @if($today_date->gte($expire_date)) // 做某事 @else // 做某事 @endif @endforeach
  • 是的,应该可以,不过 $expire_date 的设置也应该在 PHP 标记中。
【解决方案4】:

您需要先格式化 Cabon 日期对象,以匹配数据库数据中的日期(字符串)值。

@if($today_date->format("Y-m-d") >= $entry->expire_date)

它被打印是因为你的 PHP 标签错误.. 缺少“?”,应该是 &lt;?PHP

【讨论】:

  • 那是正确的吗? @php use Carbon\Carbon; $today_date = Carbon::now(); @foreach ($entries as $k =&gt; $entry) $expire_date = Carbon::createFromFormat('Y-m-d', $entry-&gt;expire_date); $data_difference = $expire_date-&gt;diffInDays($today_date); @endforeach @endphp
猜你喜欢
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2013-11-29
相关资源
最近更新 更多