sql >> Database >  >> RDS >> Mysql

Hoe kan ik realtime van een gebeurtenis in de database invoegen met behulp van php mysqli?

In plaats van te rommelen met tijdzones, waarom niet gewoon

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

Dit verandert uw kolom van een DATE-kolom naar een TIMESTAMP-kolom , waarbij alle datums worden omgezet in hun respectieve UTC-tijdstempels in het proces.

Wanneer een nieuwe rij wordt ingevoegd, gebruikt deze de huidige tijdstempel als een waarde . Tijdstempels zijn altijd in UTC, dus u hoeft de tijdzone op uw MySql-server niet te wijzigen of de datum op te geven wanneer u een nieuwe rij invoegt.

Als u uw kolommen niet kunt of wilt wijzigen, kunt u ook gewoon de tijdstempel selecteren via

SELECT UNIX_TIMESTAMP('date_added') FROM your_table;

Voor uw TimeAgo kunt u dan gewoon

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

Wanneer u DateTime een tijdstempel opgeeft, gebruikt deze altijd UTC, ongeacht uw standaard ingestelde tijdzone van de server. Daarom moet u ofwel $dateAdded . converteren naar de standaardtijdzone (zoals hierboven weergegeven) of converteer $timeSinceAdded naar UTC.

Om de dateTime te wijzigen in de tijdzone van de huidige bezoekende gebruiker, moet u ofwel

In ieder geval verander je dan gewoon beide DateTimes naar die tijdzone. Dit is eenvoudig te doen via setTimezone() .

De $timeSinceAdded wordt dan een DateInterval object, die je zo kunt gebruiken

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

Raadpleeg de links voor meer details, bijvoorbeeld over de beschikbare formaatmodifiers.



  1. Verbindingsreeks instellen met Entity Framework

  2. Meerdere tabellen retourneren vanuit een opgeslagen procedure

  3. Mysqldump meer dan één tafel?

  4. MySQL-fout 2006 (HY000) op regel 406:MySQL-server is verdwenen