2017-12-21 2 views
0

Für eine lange Zeit habe ich mit time ago Funktion gekämpft. Grundsätzlich speichere ich Beiträge/Kommentare in der MySQL-Datenbank mit dem Datum timestamp. Später möchte ich vor einiger Zeit zB 53 minutes ago angezeigt werden.PHP-Zeit vor (gibt falsche Zeit zurück)

Ich speichere Benutzer Zeitzone in MySQL db, und ich möchte diese time ago Funktion mit der Zeitzone des Benutzers anzeigen.

Aber meine Funktion gibt falschen Wert, zum Beispiel - ich lebe in UTC + 2 und Zeit in meinem Land ist 11:54. Wenn ich einen neuen Beitrag hinzufüge und db überprüfe, ist die post-hinzugefügte Zeit 11:54, aber wenn ich die Zeit anzeigen möchte (Es muss vor 10 Sekunden sein), zeigt es 1 hour, 59 minutes, 50 seconds ago an und geht runter wie 1 hour, 56 minutes, 26 seconds ago.

Car paradise screenshot - red box


Zeitzone Funktion

if(isset($userRow['timezone'])) { 
    date_default_timezone_set($userRow['timezone']); 
}elseif(isset($_COOKIE['timeZone'])) { 
    date_default_timezone_set($_COOKIE['timeZone']); 
} 

Anruf time_elapsed Funktion

<?php echo $user->time_elapsed($datevariable); ?> 

time_elapsed Funktion

function time_elapsed($datetime, $full = 7) { 
    $now = new DateTime; 
    $ago = new DateTime($datetime); 
    $diff = $now->diff($ago); 

    echo "</br>"; 
    echo "echo db timestamp for test: "; 
    echo $datetime; 
    echo "</br>"; 

    $diff->w = floor($diff->d/7); 
    $diff->d -= $diff->w * 7; 

    $string = array(
      'y' => 'year', 
      'm' => 'month', 
      'w' => 'week', 
      'd' => 'day', 
      'h' => 'hour', 
      'i' => 'minute', 
      's' => 'second', 
    ); 
    foreach ($string as $k => &$v) { 
      if ($diff->$k) { 
        $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); 
      } else { 
        unset($string[$k]); 
      } 
    } 

    if (!$full) $string = array_slice($string, 0, 1); 
    return $string ? implode(', ', $string) . ' ago' : 'just now'; 
} 
Get
+0

Sie immer sicherer werden alles in UTC konvertieren und dann Mathe tun Zeit auf der Grundlage der gemeinsamen Zeitzone. Speichern Sie alles auf jeden Fall in UTC. Das vermeidet alle Arten von Problemen mit Server- und Benutzerzeitzonen. Behandle es als Trennung von Daten von der Anzeige. – Elin

+0

@GianfrancescoAurecchia vielleicht der italienische "fuso orario" kann "timezone" in Englisch sein. Außerdem: OP bittet um eine Korrektur eines PHP-Codes. Der Fix sollte nicht ein JS sein. Sind Sie einverstanden? –

+0

ja, du hast Recht, danke, ich habe meinen Beitrag entfernt –

Antwort

1

was es passieren könnte ist, dass PHP eine Standardzeitzone verwendet, ist auf Ihrer php.ini Datei date.timezone gespeichert. Sie können es mit phpinfo(); sehen und nach date.timezone suchen. Möglicherweise müssen Sie es dort ändern.

Verfügbare Zeitzonen auf, falls Sie sie: PHP timezones

+0

Standard-Zeitzone in php.ini ist leer. –

Verwandte Themen