changer le format de la date dans la page de vue laravel

94

Je veux changer le format de date qui est extrait de la base de données. maintenant j'ai 2016-10-01 {{$user->from_date}}.Je veux changer le format 'dmy' dans laravel 5.3

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

Réponses:

145

Essaye ça:

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

Il convertira la date dans d-m-You quel que soit le format que vous avez donné.

Remarque: Cette solution est une solution générale qui fonctionne pour php et n'importe lequel de ses frameworks. Pour une méthode spécifique à Laravel, essayez la solution fournie par Hamelraj .

Mayank Pandeyz
la source
2
@ user3386779: Cela fonctionne mais ce n'est pas la plus belle solution :) Laravel a peu de mécanismes pour faire cela. Si vous choisissez ma réponse, vous devez définir le format de la date en un seul endroit et vous n'avez pas besoin de vous rappeler de changer le format de la date chaque fois que vous avez besoin d'une from_datecolonne d' affichage .
Marek Skiba
@MarekSkiba J'ai mentionné la même chose dans ma réponse :)
Mayank Pandeyz
que diriez-vous de changer de langue par exemple -> 'es' pour les noms de mois
Alberto Acuña
1
D'accord avec @sadiq, vous devriez utiliser $ user-> from_date-> format ('d / m / Y')
Erik Larsson
1
Solution géniale et très simple.
Muddasir23 le
129

À Laravel, utilisez Carbon c'est bon

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
Hamelraj
la source
ouais, et que se passe-t-il quand le $ user-> from_date est null?
lewis4u le
1
@ lewis4u si vous passez une valeur nulle, parse(null)il sera converti en heure actuelle
Hamelraj
1
Correct ... et ce n'est pas bon dans certains cas! Alors faites attention!
lewis4u
73

Dans votre ensemble de modèles:

protected $dates = ['name_field'];

après à votre avis:

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

travaux

HorecioDias
la source
3
Je pense que c'est la manière la plus "laravel" de faire ceci donc cela devrait être marqué comme la bonne réponse.
CodeChuck
Je suis d'accord aussi, c'est la meilleure façon
JonaPkr
Ça ne marche pas pour moi. J'aurais déjà parlé du type de colonne datetime et du type de colonne d'horodatage, mais l'erreur toujoursCall to a member function format() on null
Bariq Dharmawan
36

Vous pouvez vérifier Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

Vous devez définir dans votre Usercolonne de modèle from_datedans$dates tableau, puis vous pouvez changer le format dans$dateFormat

L'autre option est également de mettre cette méthode à votre Usermodèle:

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

et puis en vue si vous exécutez, {{ $user->from_date }}vous verrez le format que vous voulez.

Marek Skiba
la source
d'accord que c'est le meilleur moyen pour laravel
limco
1
Le seul inconvénient est qu'il renverra une chaîne à la vue; donc si vous souhaitez afficher différents formats de date dans la même vue, vous devrez analyser la date avec Carbon.
JustCarty
Désolé à ce sujet, est-ce un mutateur puisqu'il utilise getFromDateAttribute au lieu de setFromDateAttribute. D'après ce que je sais, le mutateur utilise un ensemble et l'accesseur utilise get
Shulz
Ce retourne la date actuelle si la colonne est nulle
Bariq Dharmawan
14

La date facile à utiliser dans le modèle de lame utilise le carbone de cette façon

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

Vous pouvez procéder de 3 façons:

1) Utilisation du modèle Laravel

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

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

dd($newDateFormat);

2) Utilisation de PHP strtotime

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

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

dd($newDateFormat2);

3) Utilisation du carbone

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

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

dd($newDateFormat3);
Dibyendu Mitra Roy
la source
9

Première méthode:

En utilisant le strtotime() heure à est le meilleur format pour changer la date au format donné.

strtotime() - Analyser toute description datetime textuelle en anglais dans un horodatage Unix

La fonction s'attend à recevoir une chaîne contenant un format de date anglais et essaiera d'analyser ce format en un horodatage Unix (le nombre de secondes depuis le 1er janvier 1970 00:00:00 UTC), par rapport à l'horodatage donné maintenant, ou l'heure actuelle si maintenant n'est pas fournie.

Exemple:

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

Production:

2007-02-26

Deuxième méthode:

date_format() - Renvoyez un nouvel objet DateTime, puis formatez la date:

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

Production:

 2013/03/15 00:00:00 
Naresh Kumar P
la source
5

Vous pouvez utiliser Carbon::createFromTimestamp

LAME

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

J'ai eu un problème similaire, je voulais changer le format, mais je voulais aussi la flexibilité de pouvoir changer le format dans le moteur de modèle de lame aussi.

Par conséquent, je configure mon modèle comme suit:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

Le setToStringFormatdéfinira toutes les dates pour utiliser ce format pour ce modèle.
L'avantage pour moi est que je pourrais avoir le format que je voulais sans le mutateur, car avec le mutateur, l'attribut est renvoyé sous forme de chaîne, ce qui signifie que dans le modèle de lame, je devrais écrire quelque chose comme ça si je voulais changer le format dans le modèle:

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

Ce qui n'est pas très propre.

Au lieu de cela, l'attribut est toujours renvoyé en tant qu'instance Carbon, mais il est d'abord renvoyé au format souhaité.
Cela signifie que dans le modèle, je pourrais écrire le code suivant, plus propre:

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

En plus de pouvoir reformater l'instance Carbon, je peux également appeler diverses méthodes Carbon sur l'attribut du modèle.

Il y a probablement un oubli de cette approche; Je parie que ce n'est pas une bonne idée de spécifier le format de chaîne en haut du modèle au cas où cela affecterait d'autres scripts. D'après ce que j'ai vu jusqu'à présent, cela ne s'est pas produit. Il n'a changé que le carbone par défaut pour ce modèle uniquement.

Dans ce cas, cela pourrait être un bon retour au format Carbon à ce qu'il était à l'origine au bas du script du modèle. C'est une idée corsée, mais cela fonctionnerait pour que chaque modèle ait son propre format.
Au contraire, si vous avez le même format pour chaque modèle, alors dans votre AppServiceProvider à la place. Cela permettrait simplement de garder le code plus net et plus facile à maintenir.

JustCarty
la source
0

Parfois, changer le format de la date ne fonctionne pas correctement, en particulier dans Laravel. Donc dans ce cas, il vaut mieux utiliser:

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

Ensuite, vous pouvez éviter une erreur comme "1970-01-01"!

Chevalier honnête
la source
Ce n'est pas un problème de laravel, qui est lié à php. Lisez ceci: Les dates dans les formats m/d/you d-m-ysont clarifiées en regardant le séparateur entre les différents composants: si le séparateur est une barre oblique (/), alors l'Américain m/d/yest supposé; alors que si le séparateur est un tiret (-)ou un point (.), alors le d-m-yformat européen est supposé. Si, cependant, l'année est donnée dans un format à deux chiffres et que le séparateur est un tiret (-), la chaîne de date est analysée comme y-m-d. php.net/manual/en/function.strtotime.php
Mayank Pandeyz
0

Dans Laravel, vous pouvez ajouter une fonction dans app / Helper / helper.php comme

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

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

Et appelez cette fonction sur n'importe quel contrôleur comme celui-ci

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

J'espère que cela aide!

Prasant Kumar
la source