Konvertieren Sie Datum und Uhrzeit in die lokale Zeitzone – Javascript, PHP und MySQL

[ad_1]

In diesem Artikel erfahren Sie, wie Sie mithilfe von Javascript die UTC-Datumszeit in die lokale Zeitzone des Benutzers konvertieren.

Ihre Datenbank ist zentralisiert, aber die Ihrer Benutzer befinden sich an unterschiedlichen geografischen Standorten. Die in Ihrer Datenbank gespeicherte Zeit ist normalerweise standardmäßig UTC. Ihre Benutzer sollten jedoch die Uhrzeit entsprechend ihrer Zeitzone sehen. Wie willst du es also machen?

Inhaltsverzeichnis:

  1. Datum/Uhrzeit in UTC speichern
  2. Rufen Sie die lokale Zeitzone des Benutzers ab
  3. Konvertieren Sie UTC in eine Zeitzone

Datum/Uhrzeit in UTC speichern

Zuerst erstellen wir eine Benutzer Tisch. Führen Sie die folgende Abfrage in Ihrem phpMyAdmin aus.

CREATE TABLE IF NOT EXISTS users(
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name TEXT,
    created_at DATETIME
)

Dann fügen wir eine Zeile in diese Tabelle ein.

INSERT INTO users(name, created_at) VALUES ('Adnan', UTC_TIMESTAMP())

Beachten Sie, dass wir verwenden UTC_TIMESTAMP() Integrierte MySQL-Funktion. Dadurch werden das aktuelle UTC-Datum und die aktuelle UTC-Uhrzeit zurückgegeben.

Rufen Sie die lokale Zeitzone des Benutzers ab

Um die lokale Zeitzone des Benutzers zu erhalten, verwenden wir die International Objekt von Javascript. Es steht für Internationalisierung.

const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone

DateTimeFormat() erstellt ein neues DateTimeFormat-Objekt.

aufgelösteOptionen() gibt ein neues Objekt zurück. Die Eigenschaften seines Objekts spiegeln das Gebietsschema und das Datum/Uhrzeit-Format wider, die während der Initialisierung des Intl.DateTimeFormat()-Objekts festgelegt wurden.

Zeitzone gibt die Zeitzone des lokalen Computers des Benutzers zurück.

Wir haben es in einer Variablen gespeichert. Jetzt rufen wir eine AJAX-Anfrage auf, um die Datensätze mit PHP aus der Datenbank abzurufen.

const ajax = new XMLHttpRequest()
ajax.open("POST", "get-data.php", true)

ajax.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      console.log(this.responseText)
    }
}

const formData = new FormData()
formData.append("timeZone", timeZone)
ajax.send()

Dadurch wird eine AJAX-Anfrage aufgerufen und der Zeitzonenwert an die Anfrage angehängt.

Konvertieren Sie die UTC-Datumszeit in die lokale Zeitzone

Um den UTC-Wert aus der Datenbank in die lokale Zeitzone des Benutzers umzuwandeln, müssen wir zunächst den Wert der Zeitzone des Benutzers aus der AJAX-Anfrage abrufen. Erstellen Sie also eine Datei mit dem Namen get-data.php und stellt innerhalb dieser Datei eine Verbindung mit der MySQL-Datenbank her.

<?php

$conn = new PDO("mysql:host=localhost;dbname=your_db_name", "db_user", "db_password");

Dann erhalten wir die Zeitzone aus der AJAX-Anfrage und rufen den Datensatz des einzelnen Benutzers ab.

$timeZone = $_POST["timeZone"] ?? "";

date_default_timezone_set($timeZone);

$sql = "SELECT * FROM users";
$result = $conn->prepare($sql);
$result->execute([]);
$user = $result->fetchObject();

Abschließend konvertieren wir den Zeitstempel von UTC in die lokale Zeitzone des Benutzers und geben ihn an den Client zurück.

echo date("d M, Y h:i:s a", strtotime($user->created_at . " UTC"));

Wenn Sie die Konsolenregisterkarte Ihres Browsers öffnen, werden Datum und Uhrzeit angezeigt, jedoch in Ihrer eigenen Zeitzone.

Verwenden der DateTimeZone-Klasse

Berufung date_default_timezone_set() setzt die Zeitzone der gesamten Anfrage auf die Zeitzone des Benutzers. Wenn Sie nur den Wert einer Spalte in die lokale Zeitzone des Benutzers konvertieren möchten, können Sie die integrierte PHP-Funktion verwenden DateTimeZone Klasse.

Zuerst müssen Sie sein Objekt erstellen:

$dateTimeZone = new DateTimeZone($timeZone);

Anschließend können Sie aus dem in der MySQL-Datenbank gespeicherten Zeitstempel ein Datetime-Objekt erstellen und es so einstellen, dass es die Zeitzone des Benutzers verwendet.

$dateTime = new DateTime($user->created_at);
$dateTime->setTimezone($dateTimeZone);

Schließlich können wir Datum und Uhrzeit im Format anzeigen.

echo $dateTime->format("d M, Y h:i:s a");

Auf diese Weise können Sie mithilfe von Javascript die UTC-Datumszeit in die lokale Zeitzone des Benutzers konvertieren.


Beitragsaufrufe: 45

[ad_2]