Ändern Sie das Datumsformat auf der Laravel-Ansichtsseite

94

Ich möchte das Datumsformat ändern, das aus der Datenbank abgerufen wird. Jetzt habe ich den 01.10.2016. {{$user->from_date}}Ich möchte das Format 'dmy' in Laravel 5.3 ändern

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

Antworten:

145

Versuche dies:

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

Das Datum wird in d-m-Ydas von Ihnen angegebene Format konvertiert .

Hinweis: Diese Lösung ist eine allgemeine Lösung, die für PHP und alle seine Frameworks funktioniert. Probieren Sie für eine Laravel-spezifische Methode die von Hamelraj bereitgestellte Lösung aus .

Mayank Pandeyz
quelle
2
@ user3386779: Es funktioniert, ist aber nicht die schönste Lösung :) Laravel hat nur wenige Mechanismen, um diese Dinge zu tun. Wenn Sie meine Antwort wählen, müssen Sie das Datumsformat an einer Stelle festlegen und nicht daran denken, das Datumsformat jedes Mal zu ändern, wenn Sie eine Anzeigespalte benötigen from_date.
Marek Skiba
@ MarekSkiba Ich habe das gleiche in meiner Antwort erwähnt :)
Mayank Pandeyz
Was ist mit einer Änderung der Sprache zum Beispiel -> 'es' für Monatsnamen
Alberto Acuña
1
Stimmen Sie mit @sadiq überein, dass Sie das Format $ user-> from_date-> ('d / m / Y') verwenden sollten
Erik Larsson
1
Tolle und sehr einfache Lösung.
Muddasir23
129

In Laravel verwenden Sie Carbon, es ist gut

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
Hamelraj
quelle
Ja, und was ist, wenn $ user-> from_date ist null?
lewis4u
1
@ lewis4u Wenn Sie einen Nullwert übergeben parse(null), wird dieser als aktuelles Datum und Uhrzeit konvertiert
Hamelraj
1
Richtig ... und das ist in manchen Fällen nicht gut! Also aufgepasst!
Lewis4u
73

In Ihrem Modellset:

protected $dates = ['name_field'];

nach Ihrer Ansicht nach:

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

funktioniert

HorecioDias
quelle
3
Ich denke, dies ist der "Laravel-Weg", um dies zu tun, daher sollte dies als die richtige Antwort markiert werden.
CodeChuck
Ich stimme auch zu, dies ist der beste Weg
JonaPkr
Es funktioniert nicht bei mir. Ich würde bereits den Datentyp-Zeitspaltentyp und den Zeitstempel-Spaltentyp angeben, aber der Fehler ist immer nochCall to a member function format() on null
Bariq Dharmawan,
36

Sie können Folgendes überprüfen Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

Sie müssen in Ihrer UserModellspalte from_dateein $datesArray festlegen und können dann das Format in ändern$dateFormat

Die andere Option besteht darin, diese Methode in Ihr UserModell aufzunehmen:

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

und dann in der Ansicht, wenn Sie ausführen {{ $user->from_date }}, sehen Sie das gewünschte Format.

Marek Skiba
quelle
stimme zu, dass dies der bessere Weg für laravel
limco ist
1
Der einzige Nachteil ist, dass eine Zeichenfolge an die Ansicht zurückgegeben wird. Wenn Sie also verschiedene Datumsformate in derselben Ansicht anzeigen möchten, müssen Sie das Datum mit Carbon neu analysieren.
JustCarty
Entschuldigung, ist dies ein Mutator, da er getFromDateAttribute anstelle von setFromDateAttribute verwendet.
Soweit
Dies gibt das aktuelle Datum zurück, wenn die Spalte null ist
Bariq Dharmawan
14

Einfach zu verwendendes Datum in der Klingenvorlage Verwenden Sie Carbon auf diese Weise

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

Es gibt drei Möglichkeiten:

1) Verwenden des Laravel-Modells

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

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

dd($newDateFormat);

2) Verwenden von PHP strtotime

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

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

dd($newDateFormat2);

3) Verwendung von Kohlenstoff

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

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

dd($newDateFormat3);
Dibyendu Mitra Roy
quelle
9

Methode Eins:

Die Verwendung der strtotime()to-Zeit ist das beste Format, um das Datum in das angegebene Format zu ändern.

strtotime() - Analysieren Sie alle englischen Text-Datums- / Uhrzeitbeschreibungen in einem Unix-Zeitstempel

Die Funktion erwartet eine Zeichenfolge mit einem englischen Datumsformat und versucht, dieses Format in einen Unix-Zeitstempel (die Anzahl der Sekunden seit dem 1. Januar 1970 00:00:00 UTC) relativ zum jetzt angegebenen Zeitstempel oder zu analysieren die aktuelle Zeit, wenn jetzt nicht geliefert wird.

Beispiel:

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

Ausgabe:

2007-02-26

Methode Zwei:

date_format() - Geben Sie ein neues DateTime-Objekt zurück und formatieren Sie das Datum:

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

Ausgabe:

 2013/03/15 00:00:00 
Naresh Kumar P.
quelle
5

Sie können verwenden Carbon::createFromTimestamp

KLINGE

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

Ich hatte ein ähnliches Problem, ich wollte das Format ändern, aber ich wollte auch die Flexibilität, das Format auch in der Blade-Template-Engine ändern zu können.

Ich habe mein Modell daher wie folgt eingerichtet:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

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

Das setToStringFormatlegt alle Daten fest, um dieses Format für dieses Modell zu verwenden.
Dies hat für mich den Vorteil, dass ich das gewünschte Format ohne den Mutator haben könnte, da das Attribut mit dem Mutator als Zeichenfolge zurückgegeben wird, was bedeutet, dass ich in der Blade-Vorlage so etwas schreiben müsste, wenn ich wollte Ändern Sie das Format in der Vorlage:

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

Welches ist nicht sehr sauber.

Stattdessen wird das Attribut weiterhin als Carbon-Instanz zurückgegeben, jedoch zuerst im gewünschten Format.
Das bedeutet, dass ich in die Vorlage den folgenden saubereren Code schreiben könnte:

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

Ich kann nicht nur die Carbon-Instanz neu formatieren, sondern auch verschiedene Carbon-Methoden für das Attribut in der Vorlage aufrufen.

Es gibt wahrscheinlich ein Versehen bei diesem Ansatz; Ich wette, es ist keine gute Idee, das Zeichenfolgenformat oben im Modell anzugeben, falls es andere Skripte betrifft. Nach dem, was ich bisher gesehen habe, ist das nicht geschehen. Es wurde nur der Standard-Carbon nur für dieses Modell geändert.

In diesem Fall kann es sinnvoll sein, das Carbon-Format auf das zurückzusetzen, was es ursprünglich am Ende des Modellskripts war. Dies ist eine gute Idee, aber es würde funktionieren, wenn jedes Modell ein eigenes Format hätte.
Wenn Sie dagegen für jedes Modell das gleiche Format haben, verwenden Sie stattdessen Ihren AppServiceProvider. Das würde den Code nur übersichtlicher und einfacher zu warten halten.

JustCarty
quelle
0

Manchmal funktioniert das Ändern des Datumsformats nicht richtig, insbesondere in Laravel. In diesem Fall ist es besser, Folgendes zu verwenden:

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

Dann können Sie Fehler wie "1970-01-01" vermeiden!

Ehrlicher Ritter
quelle
Das ist kein Laravel-Problem, das sich auf PHP bezieht. Lesen Sie dies: Daten in den Formaten m/d/yoder d-m-ywerden durch Betrachten des Trennzeichens zwischen den verschiedenen Komponenten eindeutig definiert: Wenn das Trennzeichen ein Schrägstrich ist (/), wird der Amerikaner m/d/yangenommen; Wenn das Trennzeichen ein Bindestrich (-)oder ein Punkt ist (.), wird das europäische d-m-yFormat angenommen. Wenn das Jahr jedoch in einem zweistelligen Format angegeben wird und das Trennzeichen ein Bindestrich ist (-), wird die Datumszeichenfolge als analysiert y-m-d. php.net/manual/en/function.strtotime.php
Mayank Pandeyz
0

In Laravel können Sie eine Funktion in app / Helper / helper.php hinzufügen

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

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

Rufen Sie diese Funktion auf einem solchen Controller auf

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

Ich hoffe es hilft!

Prasant Kumar
quelle