【问题标题】:Calculate difference between two dates using Carbon and Blade使用 Carbon 和 Blade 计算两个日期之间的差异
【发布时间】:2017-01-23 08:28:39
【问题描述】:

有谁知道如何传递给定变量而不是 Carbon 的默认参数?

Carbon 的文档说:

// CARBON SAMPLE

$dtToronto = Carbon::createFromDate(2012, 1, 1, 'America/Toronto');
$dtVancouver = Carbon::createFromDate(2012, 1, 1, 'America/Vancouver');
echo $dtVancouver->diffInHours($dtToronto); // 3

我想在我的控制器中做这样的事情:

  // EXAMPLE

  $date = "2016-09-16 11:00:00";
  $datework = Carbon::createFromDate($date);
  $now = Carbon::now();
  $testdate = $datework->diffInDays($now);

然后在 Blade 模板上检索它

  // VIEW ON BLADE

  <td> {{ $testdate }} </td>

【问题讨论】:

  • 您要解释的问题到底是什么。你有任何错误吗?它是否显示错误的值?我认为您的解决方案将使用new Carbon($date) 而不是Carbon::createFromDate($date)
  • 试用:Carbon::parseDate($date); insted of createFromDate
  • 所以我试图通过 Blade 计算它:&lt;td&gt;{{Carbon\Carbon::now()-&gt;diffInDays($work['date']) }}&lt;/td&gt; 但我有这个错误:Type error: Argument 1 passed to Carbon\Carbon::diffInDays() must be an instance of Carbon\Carbon, string given。所以我有变量 $work['date'] 这是模型查询的结果,而不是碳对象......

标签: php laravel laravel-blade php-carbon


【解决方案1】:

您没有遵循Carbon Documentation 中的示例。方法 Carbon::createFromDate() 需要 4 个参数:yearmonthdaytimezone。你正在尝试传递一个格式化的日期字符串。

如果你想从一个格式化的日期字符串创建一个 Carbon 对象,你可以像这样使用类的构造函数:

$date = "2016-09-17 11:00:00";
$datework = new Carbon($date);

或者你可以使用静态Carbon::parse()方法:

$date = "2016-09-17 11:00:00";
$datework = Carbon::parse($date);

出于您的目的,您可以使用以下完整示例:

$date = Carbon::parse('2016-09-17 11:00:00');
$now = Carbon::now();

$diff = $date->diffInDays($now);

然后在你的 Blade 模板中:

<td> {{ $diff }} </td>

【讨论】:

  • 好吧,经过多次尝试,这是唯一可行的方法:&lt;td&gt; &lt;!-- {{ $datework = Carbon\Carbon::parse($work['date']) }} {{ $now = Carbon\Carbon::now() }} // for this --&gt; {{ $diff = $datework-&gt;diffForHumans($now) }} &lt;/td&gt;都是直接计算视图层,添加html cmets代码以去除Blade输出...
  • @MarcoFacc 最好不要在视图模板中进行这些计算。
  • 理想情况下,我想在他自己的控制器中计算这些日期,但我需要的信息是通过 $work 数组上的 foreach 循环在视图层上检索的。我仍在尝试使一些更干净的东西,并将其放入控制器中,但目前我还没有找到更好的解决方案。
  • Carbon已经内置了Comparison,不用再回到PHP了。
  • 这正是示例中显示的内容 - Carbon 的内置差异方法之一 - diffInDays()
【解决方案2】:

刀片模板

更短的代码

{{ $diff = Carbon\Carbon::parse($data->last_updated)->diffForHumans() }}

结果:6 分钟前

【讨论】:

  • 是否可以以某种方式使用 if 条件。例如 if ($diff > 10 ) print $diff else print 'short time ammount'
  • @wajih,我不知道,但这是个好问题,我有时也觉得需要类似的东西。
【解决方案3】:

您的代码可以通过以下方式清理并删除注释掉的代码:

<td>{{ $diff = Carbon\Carbon::parse($work['date'])->diffForHumans(Carbon\Carbon::now()) }} </td>

【讨论】:

    【解决方案4】:

    Carbon 意味着您不需要混合 PHP Datetime 和 Carbon。 将日期时间设置为 Carbon 后,只需执行此操作...

    $comparisonTimeAsCarbon-&gt;diffAsCarbonInterval($theOtherTimeAsCarbon)

    您可以将diffAsCarbonInterval 更改为diffAsSecondsdiffAsMinutes 等等。

    diffForHumans 是我的最爱之一。

    或者,使用...选择您自己的格式

    $comparisonTimeAsCarbon-&gt;diff($theOtherTimeAsCarbon)-&gt;format('%I:%S')

    Carbon 甚至可以让您添加文本而不是 Carbon 时间,但是,我建议您在解析之前使用 Carbon,以防万一。

    【讨论】:

      【解决方案5】:

      最短路径

      我们可以直接写在blade里面

      <span>{{ \Carbon\Carbon::parse( $start_date )->diffInDays( $end_date ) }}</span>
      

      【讨论】:

        【解决方案6】:

        您可以直接在 Blade 模板上使用:

        {{ (Carbon\Carbon::parse(Auth::user()->created_at))->diffInDays(Carbon\Carbon::now()) }}
        

        【讨论】:

          猜你喜欢
          • 2020-09-18
          • 1970-01-01
          • 1970-01-01
          • 2013-02-01
          • 1970-01-01
          • 2021-11-25
          • 2011-08-01
          相关资源
          最近更新 更多