2016-09-20 6 views

Antwort

0

Datum nicht mit Zeitzone in Datenbank speichern. In db store in UTC (Standard-Laravel-Konfiguration) wird dieses Basisdatum konvertiert, wenn ein Teil des Benutzers eine andere als die Standardzeitzone auswählt.

Benutzermodell sollte Char Feld "Zeitzone" mit Wert zum Beispiel: "Europa/London" oder "Europa/Warschau" oder "Asien/Wladiwostok". Sie können alle Zeitzonen in camroncade/timezone package finden. Wenn Sie in der Anwendung datetime anzeigen, werden Sie die Zeitzone des Benutzers an das Carbon datetime-Objekt anhängen und in die richtige Zeit umwandeln.

$value // your base UTC datetime 
$value = new Carbon($value); 
$value->setTimezone(Auth:user()->timezone); 
print $value->format('Y-m-d H:i:s') // datetime in user's timezone 

Beachten Sie, dass Sie Datum Gießen Umwandlungsprozess unter Verwendung von durch zwingende Standard AsDateTime Methode in Ihrem Modell od Basemodel automatisieren können.

protected function asDateTime($value) 
    { 
     if($value instanceof Carbon) { 
      return $value; 
     } elseif($value instanceof \DateTime) { 
      $value = $value->format('Y-m-d H:i:s'); 
     } 

     $value = new Carbon($value); 

     if(Auth::user()) { 
      $value->setTimezone(Auth::user()->timezone); 
     } 

     return $value; 
    } 

Diese Methode jedes Mal gebrannt werden Sie in Modell in geschützt $ Daten Eigenschaft definiert Datetime-Feld wird darum ersuchen (created_at sind updated_at in Standardeinstellung).

+0

hi Ich habe einen Fehler bei $ value = new Carbon ($ value); der Fehler sagt DateTime :: __ construct(): Fehler beim Parsen der Zeitzeichenfolge (1474430400) an Position 8 (0): Unerwartetes Zeichen @ Adiasz –

+0

Ich benutze Laravel 5.3 –

+0

1474430400 - ist das Datum Zeitmarke, so dass Sie Objekt auf diese Weise $ erstellen müssen Wert = Carbon :: createFromTimestamp (1474430400); Wenn Sie Daten in mehreren Formaten haben, müssen Sie prüfen, ob Sie zuvor ein Carbon-Objekt erstellen. Sehen Sie sich die Dokumentation an http://carbon.nesbot.com/docs/ – Adiasz

0

Sie können datetime und Zeitstempel beide verwenden. besser gehen für datetime Datentyp, der zum Abrufen gut ist.

0

Versuchen Sie immer, datetime in Millisekunden zu speichern, damit Sie diese in einer bestimmten Zeitzone konvertieren können. Und Sie können Varchar und String (in Laravel) verwenden, um es zu speichern.

Verwandte Themen