змінити формат дати на сторінці laravel view


94

Я хочу змінити формат дати, який отримується з бази даних. тепер я отримав 01.10.2016. {{$user->from_date}}Я хочу змінити формат 'dmy' у laravel 5.3

{{ $user->from_date->format('d/m/Y')}}

Відповіді:


145

Спробуйте це:

date('d-m-Y', strtotime($user->from_date));

Він конвертує дату в d-m-Yбудь-який формат, який ви вказали.

Примітка: Це рішення є загальним рішенням, яке працює для php та будь-якого з його фреймворків. Для конкретного методу Laravel спробуйте рішення, надане Hamelraj .


2
@ user3386779: Це працює, але це не найкрасивіше рішення :) Laravel має небагато механізмів для цього. Якщо ви обираєте мою відповідь, вам потрібно встановити формат дати в одному місці, і не потрібно пам’ятати про зміну формату дати кожного разу, коли вам потрібен from_dateстовпець відображення .
Marek Skiba

@MarekSkiba Я згадую те саме у своїй відповіді :)
Mayank Pandeyz

як щодо зміни мови, наприклад -> 'es' для імен місяців
Alberto Acuña

1
Погодьтеся з @sadiq, що вам слід використовувати формат $ user-> from_date-> format ('d / m / Y')
Ерік Ларссон,

1
Чудове і дуже просте рішення.
Muddasir23,

129

У Laravel використовують Carbon - це добре

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}

так, і що, коли $ user-> from_date null?
lewis4u

1
@ lewis4u, якщо ви передасте йому нульове значення, parse(null)воно перетвориться на поточну дату
Хамелрай

1
Правильно ... і це не годиться для деяких випадків! Тож пильнуй!
lewis4u

73

У вашому наборі моделей:

protected $dates = ['name_field'];

після на ваш погляд:

{{ $user->from_date->format('d/m/Y') }}

робіт


3
Я думаю, що це найбільш "ларавельний спосіб" зробити це, тому це слід позначити як правильну відповідь.
CodeChuck

я також погоджуюсь, це найкращий спосіб
JonaPkr

У мене це не працює. Я б уже використовував тип стовпця дати та часу та тип стовпця мітки часу, але помилка все одноCall to a member function format() on null
Барік Дхармаван

36

Ви можете перевірити Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

Ви повинні встановити у вашій Userмоделі стовпця from_dateв $datesмасиві , а потім ви можете змінити формат$dateFormat

Інший варіант - також застосувати цей метод до вашої Userмоделі:

public function getFromDateAttribute($value) {
    return \Carbon\Carbon::parse($value)->format('d-m-Y');
}

а потім у полі зору, якщо ви біжите {{ $user->from_date }} ви побачите потрібний формат.


погодьтеся, що це кращий спосіб для laravel
limco

1
Єдиним недоліком є ​​те, що він поверне рядок до подання; отже, якщо ви хочете показати різні формати дат в одному і тому ж поданні, вам доведеться перетворити дату на Carbon.
JustCarty

Вибачте, це мутатор, оскільки він використовує getFromDateAttribute замість setFromDateAttribute. З того, що я знаю, мутатор використовує набори, а додатки отримує
Шульц,

Ця повернута поточна дата, якщо стовпець є нульовим
Барік Дхармаван


10

Ви можете зробити 3 способи:

1) Використання моделі Laravel

$user = \App\User::find(1);

$newDateFormat = $user->created_at->format('d/m/Y');

dd($newDateFormat);

2) Використання PHP strtotime

$user = \App\User::find(1);

$newDateFormat2 = date('d/m/Y', strtotime($user->created_at));

dd($newDateFormat2);

3) Використання вуглецю

$user = \App\User::find(1);

$newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y');

dd($newDateFormat3);

9

Спосіб перший:

Використання strtotime()часу - найкращий формат для зміни дати на заданий формат.

strtotime() - Проаналізуйте будь-який текстовий опис дати та часу англійською мовою у мітці часу Unix

Функція очікує отримання рядка, що містить англійський формат дати, і спробує проаналізувати цей формат на мітку часу Unix (кількість секунд з 1 січня 1970 00:00:00 UTC) щодо позначки часу, вказаної зараз, або поточний час, якщо зараз не вказано.

Приклад:

<?php
$timestamp = strtotime( "February 26, 2007" );  
print date('Y-m-d', $timestamp );
?>

Вихід:

2007-02-26

Спосіб другий:

date_format() - Поверніть новий об'єкт DateTime, а потім відформатуйте дату:

<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d H:i:s");
?>

Вихід:

 2013/03/15 00:00:00 

5

Можна використовувати Carbon::createFromTimestamp

ЛІЗО

{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}

4

У мене була подібна проблема, я хотів змінити формат, але я також хотів гнучкості можливості змінити формат у механізмі шаблону леза.

Тому я встановив свою модель наступним чином:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

\Carbon\Carbon::setToStringFormat('d-m-Y');

class User extends Model
{
    protected $dates = [
        'from_date',
    ];
}

setToStringFormatВстановлять все дати , щоб використовувати цей формат для цієї моделі.
Перевага цього для мене полягає в тому, що я міг би мати бажаний формат без мутатора, оскільки з мутатором атрибут повертається у вигляді рядка, що означає, що в шаблоні леза мені довелося б написати щось подібне, якщо б я хотів змінити формат у шаблоні:

{{ date('Y', strtotime($user->from_date)) }}

Що не дуже чисто.

Натомість атрибут все ще повертається як екземпляр Carbon, проте спочатку він повертається у бажаному форматі.
Це означає, що в шаблоні я міг би написати наступний, чистіший код:

{{ $user->from_date->format('Y') }}

Окрім того, що я можу переформатувати примірник Carbon, я також можу викликати різні методи Carbon для атрибута в шаблоні.

Ймовірно, існує недогляд за цим підходом; Я збираюся взяти на заклад, що не дуже вдало вказувати формат рядка у верхній частині моделі, якщо це вплине на інші сценарії. З того, що я бачив досі, цього не сталося. Він змінив лише Carbon за замовчуванням лише для цієї моделі.

У цьому випадку може бути гарним встановити формат Carbon до того, що він був спочатку внизу сценарію моделі. Це обгрунтована ідея, але для кожної моделі буде добре мати свій власний формат.
Навпаки, якщо у вас однаковий формат для кожної моделі, то натомість у вашому AppServiceProvider. Це просто збереже код більш охайним і простішим у обслуговуванні.


0

Іноді зміна формату дати не працює належним чином, особливо в Laravel. Тож у такому випадку краще використовувати:

$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));

Тоді ви можете уникнути помилок, таких як "1970-01-01"!


Це не проблема laravel, пов'язана з php. Прочитайте це: Дати у форматах m/d/yабо d-m-yнеоднозначні, дивлячись на роздільник між різними компонентами: якщо роздільник - коса риса (/), то передбачається американський m/d/y; тоді як якщо роздільник - тире (-)або крапка (.), то передбачається європейський d-m-yформат. Якщо ж рік вказано у двозначному форматі, а роздільником є ​​тире (-), рядок дати аналізується як y-m-d. php.net/manual/en/function.strtotime.php
Mayank Pandeyz

0

У Laravel ви можете додати функцію всередині app / Helper / helper.php, наприклад

function formatDate($date = '', $format = 'Y-m-d'){
    if($date == '' || $date == null)
        return;

    return date($format,strtotime($date));
}

І викликати цю функцію на будь-якому контролері, подібному до цього

$start_date = formatDate($start_date,'Y-m-d');

Сподіваюся, це допоможе!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.