2012-06-20 4 views
0

Possible en double:
Timezone conversion in phpconvertir un horodatage en plusieurs fuseaux horaires

Voici un exemple simple de ce que je veux faire. J'ai une variable $time contenant un horodatage.

Maintenant, je veux le convertir en horodatage des différents fuseaux horaires

Est-il possible de le faire sans utiliser la fonction date_default_timezone_set() plusieurs fois?

Je sais que mon point peut sembler confus et pointer moins alors s'il vous plaît clarifier tout doute dans les commentaires.

Si je, par exemple, 100 appels à changer: -

  1. Il affecte mes autres fonctions
  2. Le nom de la fonction par défaut suggère son
  3. Il ralentit le script.
+0

Quel est le problème exact avec cette fonction? :) –

+0

Exactement mon point.Au lieu de l'écrire ici, vous devriez avoir considéré inclure cette information dans la question elle-même :) –

Répondre

2

Vous pouvez utiliser l'objet DateTime et définir le fuseau horaire au besoin en utilisant la méthode SetTimezone().

Par exemple, le code suivant: -

$datetime = new DateTime(); 
var_dump($datetime->getTimezone()->getName()); 
var_dump($datetime->format(DateTime::ISO8601)); 
$datetime->setTimezone(new DateTimeZone('UTC')); 
var_dump($datetime->format(DateTime::ISO8601)); 
$datetime->setTimezone(new DateTimeZone('America/New_York')); 
var_dump($datetime->format(DateTime::ISO8601)); 

m'a donné la sortie suivante: -

string 'Europe/London' (length=13) 
string '2012-06-20T20:33:29+0100' (length=24) 
string '2012-06-20T19:33:29+0000' (length=24) 
string '2012-06-20T15:33:29-0400' (length=24) 

Mon serveur par défaut dev TZ est l'Europe/Londres, vous pouvez obtenir des résultats légèrement différents . Il existe une liste de supported timezones here.

+0

Haha. Je comprends: P i a également posté que de mon android: P – kritya

+0

Voici quelques exemples de conversion de fuseau horaire DateTime - http://blog.serverdensity.com/2009/03/21/handling-timezone-conversion-with-php- datetime / – anjunatl

0

Pour vous donner un échantillon de quelque chose ive fait pour créer une date dans différents fuseaux horaires .. Voici ce que je l'ai fait

function create_date($format, $time, $offset = -6) 
{ 
    return gmdate($format, $time + (3600 * $offset)); 
} 

Si vous voulez conserver ce format d'horodatage modifier juste ressembler à ceci.

function create_date($time, $offset = -6) 
{ 
    return $time + (3600 * $offset); 
} 

MISE À JOUR:

Si vous devez entrer dans le fuseau horaire sous forme de texte j'utiliser la liste de PHP Timezone List question, puis dans la fonction faire une recherche simple sur ce tableau pour obtenir le décalage fais ce travail.

AVIS:

pour que cela fonctionne correctement, l'heure d'origine doit être GMT Heure

+0

Cela doit entrer le décalage comme l'ancienne méthode. Ce qui signifie que je dois avoir un décalage pour chaque fuseau horaire. Lorsque php a les données pour nous je voudrais l'utiliser d'une certaine manière :) – kritya

+0

@kritya voir mise à jour. Je suppose que vous voulez dire que vous voulez faire quelque chose comme create_date (123456789, 'US/Eastern'); – bretterer

+0

Quelles données avez-vous? Un seul horodatage et vous voulez obtenir le même horodatage 23 autres fois pour tous les autres fuseaux horaires? – NaturalBornCamper

Questions connexes