Laravel: показать разницу между двумя датами в клинке - PullRequest
0 голосов
/ 19 октября 2018

Я хочу знать, возможно ли отобразить в режиме блэйда разницу между системной датой и записью базы данных в формате даты ($ ticket-> start_date) без использования Carbon.

Дляпример (я знаю, это не работает)

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

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

У вас есть две отдельные проблемы:

Во-первых: как вы различаете две даты.Вы можете перейти на высокие или низкие технологии здесь.Если вы не хотите использовать 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, что лучше, чем использование DateTime в PHP, но зависит только от вас.

0 голосов
/ 19 октября 2018

Пожалуйста, используйте Carbon lib, который является частью laravel.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') ) );
0 голосов
/ 19 октября 2018

функция

date_diff()

Параметры

Есть два параметра.
Вам необходимо пройтиDateTmime возражает против этих параметров.

Возвращает

Эта функция возвращает объект DateInterval.
Вы можете отформатировать DateInterval объект, используя функцию format().

Пример

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

Вы можете ввести что угодно в этой строке format().

Этот пример формата возвращает что-то вроде "9 Months, 18 days"

DateInterval Object

Это пример 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
...