簡體   English   中英

Laravel:顯示刀片中兩個日期之間的差異

[英]Laravel: display difference between two dates in blade

我想知道是否有可能在不使用Carbon的情況下在刀片視圖中顯示系統日期與數據庫記錄之間的日期格式($ ticket-> start_date)的差異。

例如(我知道,它不起作用)

<td>{{ diff(date('Y-m-d'), strtotime($ticket->start_date))}}</td>

功能

date_diff()

參量

有兩個參數。
您需要將DateTmime對象傳遞給那些參數。

退貨

該函數返回一個DateInterval對象。
您可以使用format()函數設置DateInterval對象的format()

<td>{{ date_diff(new \DateTime($ticket->start_date), new \DateTime())->format("%m Months, %d days"); }}</td>

您可以在此format()字符串中輸入任何內容。

此示例格式返回類似"9 Months, 18 days"

DateInterval對象

這是DateInterval對象的示例。
您可以通過以下發布的format()函數訪問這些屬性。

  interval: + 9m 18d 02:27:21.488037
  +"y": 0
  +"m": 9
  +"d": 18
  +"h": 2
  +"i": 27
  +"s": 21
  +"f": 0.488037
  +"weekday": 0
  +"weekday_behavior": 0
  +"first_last_day_of": 0
  +"invert": 0
  +"days": 291
  +"special_type": 0
  +"special_amount": 0
  +"have_weekday_relative": 0
  +"have_special_relative": 0

您在這里有兩個獨立的問題:

第一:如何區分兩個日期。 您可以在這里選擇高科技或低端技術。 如果您不想使用Carbon,我建議您采用低技術含量:

<?php
// Note, this gives you a timestamp, i.e. seconds since the Epoch.
$ticketTime = strtotime($ticket->start_date);

// This difference is in seconds.
$difference = $ticketTime - time();

在這一點上,您必須決定如何輸出差異。 馬上? 在幾個小時內?

Difference: {{ $difference }} seconds

Difference: {{ round($difference / 3600) }} hours

Difference: {{ round($difference / 86400) }} days

如果您想要像Carbon::diffForHumans()這樣漂亮的東西,就必須做額外的工程。

第二:這現在成為您的問題,對於您的前端來說這是否太多代碼了。 顯然,您可以將以上所有內容簡化為PHP的單一代碼,但您的同事可能不會意識到它變得多么難以理解:

{{ round((strtotime($ticket->start_date) - time()) / 3600) }} hours

注意事項

使用時間戳避免了處理時區的問題。 對於一堆用例,這就足夠了; 對於其他人來說,這是遠遠不夠的。 但是,如果您想處理時區,使用Carbon無疑會更好,它比使用PHP的DateTime更好,但取決於您。

請使用laravel的Carbonlib。 https://carbon.nesbot.com/docs/#api-difference

dd( \Carbon\Carbon::now()->diff( \Carbon\Carbon::parse('your db datetime') ) );

例:

dd( \Carbon\Carbon::now()->diff( \Carbon\Carbon::parse('2019-12-12 00:00:00') ) );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM