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
- moet deze informatie in uw database hebben, b.v. omdat u geregistreerde gebruikers vraagt om deze informatie te verstrekken
- of u bepaalt het tijdens runtime, meestal door een GeoIP-zoekopdracht uit te voeren op het IP-adres van de bezoekende gebruiker of door de DateTime Offset te verzenden vanuit de browser van de gebruiker.
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.