sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg indsætte realtid af en begivenhed i databasen ved hjælp af php mysqli?

I stedet for at rode med tidszoner, hvorfor ikke bare gøre det

ALTER TABLE `your_table`
  CHANGE `date_added` `date_added`
  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

Dette ændres din kolonne fra en DATE-kolonne til en TIMESTAMP-kolonne , der konverterer alle datoerne til deres respektive UTC-tidsstempler i processen.

Når en ny række er indsat, bruger den det aktuelle tidsstempel som en værdi . Tidsstempler er altid i UTC, så du behøver ikke at ændre tidszonen på din MySql-server eller angive datoen, når du indsætter en ny række.

Hvis du ikke kan eller ønsker ikke at ændre dine kolonner, kan du også bare vælge tidsstemplet via

SELECT UNIX_TIMESTAMP('date_added') FROM your_table;

For din TimeAgo kan du så bare gøre

$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);

Når du angiver et tidsstempel til DateTime, vil det altid bruge UTC uanset din standardservertidszone. Derfor skal du enten konvertere $dateAdded til standardtidszonen (som vist ovenfor) eller konverter $timeSinceAdded til UTC.

For at ændre dateTime til den aktuelt besøgende brugers tidszone, skal du enten

Under alle omstændigheder ændrer du bare begge DateTimes til den tidszone. Dette gøres nemt via setTimezone() .

$timeSinceAdded vil så være et DateInterval objekt, som du kan bruge sådan her

echo $timeSinceAdded->format('%a total days');

Se venligst linkene for yderligere detaljer, for eksempel om de tilgængelige formatmodifikatorer.



  1. SYSUTCDATETIME() Eksempler i SQL Server (T-SQL)

  2. Hvorfor giver det mig alle resultater at bruge et Underscore-tegn i et LIKE-filter?

  3. Sammensat primær nøgle versus yderligere id-kolonne?

  4. Arbejde med begivenheder i MySQL