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')}}

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 .


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')}}

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


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.


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')}}

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);

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 

5

Puedes usar Carbon::createFromTimestamp

ESPADA

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

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.


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"!


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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.