изменить формат даты на странице просмотра laravel


94

Я хочу изменить формат даты, полученный из базы данных. теперь у меня 2016-10-01. {{$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столбец отображения .
Марек Скиба,

@MarekSkiba Я упомянул то же самое в своем ответе :)
Mayank Pandeyz

как насчет того, чтобы поменять язык, например -> 'es' для названий месяцев
Альберто Акунья

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

У меня это не работает. Я бы хотел указать тип столбца datetime и тип столбца timestamp, но ошибка все еще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. Насколько я знаю, мутатор использует set, а метод доступа
Шульз,

Это возвращает текущую дату, если столбец имеет значение NULL
Барик Дхармаван,

14

Простая в использовании дата в шаблоне лезвия, таким образом используйте Carbon

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

10

Это можно сделать тремя способами:

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 (количество секунд с 00:00:00 UTC 1 января 1970 года) относительно метки времени, указанной в now, или текущее время, если сейчас не указано.

Пример:

<?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 к тому, что было изначально в нижней части сценария модели. Это разумная идея, но для каждой модели будет работать собственный формат.
Напротив, если у вас один и тот же формат для каждой модели, то вместо этого в вашем 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
Маянк Пандейз

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.