cambiar el formato de fecha en la página de vista de laravel

94

Quiero cambiar el formato de fecha que se obtiene de la base de datos. ahora tengo 2016-10-01 {{$user->from_date}}. Quiero cambiar el formato 'dmy' en laravel 5.3

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

Respuestas:

145

Prueba esto:

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

Convertirá la fecha al d-m-Yformato que le haya dado.

Nota: Esta solución es una solución general que funciona para php y cualquiera de sus marcos. Para un método específico de Laravel, pruebe la solución proporcionada por Hamelraj .

Mayank Pandeyz
fuente
2
@ user3386779: Funciona pero no es la solución más hermosa :) Laravel tiene pocos mecanismos para hacer estas cosas. Si elige mi respuesta, necesita establecer el formato de fecha en un solo lugar y no es necesario que recuerde cambiar el formato de fecha cada vez que necesite mostrar la from_datecolumna.
Marek Skiba
@MarekSkiba He mencionado lo mismo en mi respuesta :)
Mayank Pandeyz
¿Qué tal cambiar el idioma, por ejemplo? -> 'es' para nombres de meses
Alberto Acuña
1
De acuerdo con @sadiq, debe usar $ user-> from_date-> format ('d / m / Y')
Erik Larsson
1
Gran y muy sencilla solución.
Muddasir23
129

En Laravel usa Carbon es bueno

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
Hamelraj
fuente
sí, ¿y qué ocurre cuando $ user-> from_date es null?
lewis4u
1
@ lewis4u, si pasa un valor nulo parse(null), se convertirá como fecha y hora actual
Hamelraj
1
Correcto ... ¡y eso no es bueno para algunos casos! ¡Así que tenga cuidado!
lewis4u
73

En su conjunto de modelos:

protected $dates = ['name_field'];

después en tu opinión:

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

trabajos

HorecioDias
fuente
3
Creo que esta es la forma más "laravel" de hacer esto, por lo que debe marcarse como la respuesta correcta.
CodeChuck
también estoy de acuerdo, esta es la mejor manera
JonaPkr
No me funciona. Ya sabía sobre el tipo de columna de fecha y hora y el tipo de columna de marca de tiempo, pero el error sigue siendoCall to a member function format() on null
Bariq Dharmawan
36

Puede consultar Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

Necesita establecer en la Usercolumna de su modelo from_dateen la $datesmatriz y luego puede cambiar el formato en$dateFormat

La otra opción también es poner este método en tu Usermodelo:

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

y luego, a la vista, si ejecuta {{ $user->from_date }}, verá el formato que desea.

Marek Skiba
fuente
estoy de acuerdo en que esta es la mejor manera para laravel
limco
1
La única desventaja es que devolverá una cadena a la vista; por lo que si desea mostrar diferentes formatos de fecha en la misma vista, tendrá que analizar la fecha con Carbon.
JustCarty
Lo siento, ¿es esto un Mutador ya que usa getFromDateAttribute en lugar de setFromDateAttribute? Por lo que sé, mutator usa set y accessor usa get
Shulz
Esta fecha de retorno actual si la columna es nula
Bariq Dharmawan
14

La fecha fácil de usar en la plantilla de la hoja usa Carbon de esa manera

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

Hay 3 formas de hacerlo:

1) Usando el modelo de Laravel

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

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

dd($newDateFormat);

2) Usando PHP strtotime

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

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

dd($newDateFormat2);

3) Uso de carbono

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

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

dd($newDateFormat3);
Dibyendu Mitra Roy
fuente
9

Método uno:

Usar la strtotime()hora hasta es el mejor formato para cambiar la fecha al formato dado.

strtotime() - Analizar cualquier descripción textual de fecha y hora en inglés en una marca de tiempo de Unix

La función espera recibir una cadena que contenga un formato de fecha en inglés e intentará analizar ese formato en una marca de tiempo Unix (el número de segundos desde el 1 de enero de 1970 a las 00:00:00 UTC), en relación con la marca de tiempo dada ahora, o la hora actual si ahora no se proporciona.

Ejemplo:

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

Salida:

2007-02-26

Método dos:

date_format() - Devuelve un nuevo objeto DateTime y luego formatea la fecha:

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

Salida:

 2013/03/15 00:00:00 
Naresh Kumar P
fuente
5

Puedes usar Carbon::createFromTimestamp

ESPADA

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

Tuve un problema similar, quería cambiar el formato, pero también quería la flexibilidad de poder cambiar el formato también en el motor de plantilla Blade.

Por lo tanto, configuro mi modelo de la siguiente manera:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

El setToStringFormatestablecerá todas las fechas para usar este formato para este modelo.
La ventaja de esto para mí es que podría tener el formato que quisiera sin el mutador, porque con el mutador, el atributo se devuelve como una cadena, lo que significa que en la plantilla de la hoja tendría que escribir algo como esto si quisiera cambiar el formato en la plantilla:

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

Lo que no está muy limpio.

En cambio, el atributo todavía se devuelve como una instancia de Carbon, sin embargo, primero se devuelve en el formato deseado.
Eso significa que en la plantilla podría escribir el siguiente código más limpio:

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

Además de poder reformatear la instancia de Carbon, también puedo llamar a varios métodos de Carbon en el atributo de la plantilla.

Probablemente haya un descuido en este enfoque; Apuesto a que no es una buena idea especificar el formato de cadena en la parte superior del modelo en caso de que afecte a otros scripts. Por lo que he visto hasta ahora, eso no ha sucedido. Solo ha cambiado el carbono predeterminado solo para ese modelo.

En este caso, podría ser una buena opción volver a configurar el formato Carbon a lo que estaba originalmente en la parte inferior de la secuencia de comandos del modelo. Esta es una idea organizada, pero funcionaría que cada modelo tuviera su propio formato.
Por el contrario, si tiene el mismo formato para cada modelo, en su lugar, en su AppServiceProvider. Eso mantendría el código más ordenado y más fácil de mantener.

JustCarty
fuente
0

A veces, cambiar el formato de fecha no funciona correctamente, especialmente en Laravel. Entonces, en ese caso, es mejor usar:

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

¡Entonces puede evitar errores como "1970-01-01"!

Caballero honesto
fuente
Ese no es un problema de laravel, el relacionado con php. Lea esto: Las fechas en los formatos m/d/yo d-m-yse eliminan la ambigüedad observando el separador entre los distintos componentes: si el separador es una barra (/), m/d/yse asume el americano ; mientras que si el separador es un guión (-)o un punto (.), d-m-yse asume el formato europeo . Sin embargo, si el año se da en un formato de dos dígitos y el separador es un guión (-), la cadena de fecha se analiza como y-m-d. php.net/manual/en/function.strtotime.php
Pandeyz
0

En Laravel puede agregar una función dentro de la aplicación / Helper / helper.php como

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

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

Y llama a esta función en cualquier controlador como este

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

¡Espero eso ayude!

Prasant Kumar
fuente