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
.
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
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
@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? –
ja, du hast Recht, danke, ich habe meinen Beitrag entfernt –