Question

Je suis en train de déterminer si une chaîne qui représente la date et l'heure, donné dans un flux Twitter JSON est dans une plage de colonnes d'horodatage dans MySQL.

Voici la chaîne exemple:

'Sat, 31 Oct 2009 23:48:37 +0000',

Le +0000 selon le API (created_at) indique qu'il est en effet UTC. Maintenant, j'utilise strtotime et date juste pour confirmer l'heure. Avec:

$t = 'Sat, 31 Oct 2009 23:48:37 +0000';
$timestamp = strtotime($t);

echo date('M d Y H:m:s', $timestamp);

Je reçois Oct 31 2009 19:10:37. Si je retire le +0000 je reçois Oct 31 2009 23:10:37. Ainsi, la différence entre avoir +0000 et ne pas l'avoir est de 4 heures. Je devine à cause de mon fuseau horaire local (Maryland, USA = America/New_York) et différent de l'UTC évidemment.

Je ne suis pas sûr si je devrais le décapage +0000 ou de l'utiliser lorsque vous essayez de déterminer si cet horodatage est dans la plage des deux horodatages stockées dans ma base de données, qui sont 2009-10-30 23:16:38 et 2009-11-25 12:00:00. Je me sens stupide et un peu confus maintenant, quand je peuplaient ces horodatages l'AAAA-MM-JJ H: M: S est venu d'un sélecteur de date heure Javascript, un exemple de format est 10/31/2009 11:40 am et j'utilise STR_TO_DATE comme ceci:

STR_TO_DATE("10/31/2009 11:40 am", "%m/%d/%Y %l:%i %p")'),

Dois-je quitter le +0000 ou dépouiller? Mentalement tapote sur

Était-ce utile?

La solution

Vous devez bien sûr laisser les informations de fuseau horaire dans, à condition que vous êtes aussi bien réglage du fuseau horaire du serveur . Sinon, quel est le point, toutes vos comparaisons de temps seront 4 heures de repos. : O)

Pour comparer le temps que vous devez le laisser comme horodatage UNIX, à savoir le résultat de strtotime.

$twitterTS    = strtotime('Sat, 31 Oct 2009 23:48:37 +0000');
$localStartTS = strtotime('Sat, 31 Oct 2009 19:00:00'); // timezone is -0400 implicitly
$localEndTS   = strtotime('Sat, 31 Oct 2009 20:00:00');

if ($localStartTS <= $twitterTS && $twitterTS <= $localEndTS) {
    // twitter timestamp is within range
}

Pour préciser: Avant de comparer les temps de différents fuseaux horaires, assurez-vous qu'ils sont tous convertis au même fuseau horaire. En comparant le temps de Londres à 20h00 heure de New York 20:00 sans information de fuseau horaire donnera des résultats incorrects. strtotime convertira tout temps à votre fuseau horaire local; si l'information fuseau horaire est présent dans l'entrée, il honorera et convertir le temps de façon appropriée, sinon il supposera que l'heure est déjà localisé. Si tous les temps dans votre base de données sont locales, vous devez absolument sûr de localiser tous les horodateurs que vous souhaitez comparer contre eux.
Une stratégie alternative serait de convertir toujours tout temps à UTC avant de stocker ou de les comparer.

Faites votre choix, il suffit de faire de manière cohérente.

Autres conseils

En PHP, vous pouvez simplement utiliser la fonction de sous-chaîne pour décomposer le temps de twitter JSON dans ses composants comme si

//'Sat, 31 Oct 2009 23:48:37 +0000'
$hour = substring($jsontime,18,2);
$minute = substring($jsontime,22,2);
...

$phpDatetime mktime($hour,$minute,$second,$month,$day,$year);

De là, je pense que vous l'avez déjà. Ne » oubliez pas de tenir compte des différences GMT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top