Я хочу знать, возможно ли показать в режиме блэйда разницу между системной датой и записью базы данных в формате даты ($ ticket-> start_date) без использования Carbon.
Например (я знаю, это не работает)
<td>{{ diff(date('Y-m-d'), strtotime($ticket->start_date))}}</td>
У вас есть две отдельные проблемы здесь:
Во-первых: как вы различаете две даты. Вы можете перейти на высокие или низкие технологии здесь. Если вы не хотите использовать 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, но решать только вам.
функция
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
Пожалуйста, используйте 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') ) );