2010-05-28 7 views
1

J'ai une heure qui est en train d'être envoyée en temps UTC, mais je veux l'ajuster de sorte que ce soit les bords extérieurs des jours sur l'heure de la côte Est (EST/EDT). C'est-à-dire, je veux que l'utilisateur puisse entrer dans les dates centrées EDT/EST, et l'ait interroger avec les dates correctes d'UTC.Ajustement de fuseau horaire PHP

$start_date et $end_date sont des dates formatées MM/DD/YYYY transmises via une variable GET.

$start_date = date('Y-m-d 00:00:00', $start_date); 
$end_date = date('Y-m-d 23:59:59', $end_date); 

Ces dates sont à utiliser dans une requête de base de données, dont les heures sont stockées en heure UTC. Donc, je veux que la date de début soit la veille à 20h ou 19h, en fonction de l'heure d'été, et que la date de fin soit 07:59:59 ou 6:59:59, toujours en fonction de l'heure d'été.

Comment est-ce que je ferais cela?

+0

Quelle base de données utilisez-vous? Postgres a par exemple un type de champ appelé "timestamp with time zone" qui fait exactement ce que vous cherchez. La base de données s'occuperait de toutes vos conversions de fuseau horaire. – Kenaniah

+0

Avez-vous vérifié la fonction [date_default_timezone_set()] (http://fr.php.net/manual/fr/fonction.date-default-timezone-set.php)? –

Répondre

0

En MySQL, vous pouvez effectuer les opérations suivantes:

SELECT * FROM tablename WHERE date = DATE_SUB('2010-06-17 00:00:00',INTERVAL 4 HOUR); 
2

Si vous savez ce fuseau horaire les données vient, vous pouvez faire quelque chose comme ceci:

$userTimezone = new DateTimeZone('America/New_York'); 
$systemTimezone = new DateTimeZone('Europe/London'); 

$ts = new DateTime($datetime, $userTimezone); 
$ts->setTimezone($systemTimezone); 

return $ts->format('Y-m-d H:i:s'); 

Où datetime $ est valide format de date selon ces règles - http://www.php.net/manual/en/datetime.construct.php

Ceci est le noyau de ce que nous faisons dans web2project - http://web2project.net/ - pour obtenir un datetime dans le timezon sélectionné par les utilisateurs e mais mémorisez-le en GMT/UTC.