Laravel: показать разницу между двумя датами в клинке

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

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

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

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, что лучше, чем использование DateTime в PHP, но решать только вам.

2

Другие решения

функция

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
2

Пожалуйста, используйте 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') ) );
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector