Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/11/2010, 02h19   #1
Membre régulier
 
Avatar de monlou
 
Inscription : janvier 2010
Messages : 265
Détails du profil
Informations personnelles :
Âge : 59
Localisation : Canada

Informations forums :
Inscription : janvier 2010
Messages : 265
Points : 73
Points : 73
Par défaut amener une variable $date au TimeZone UTC

Bonjour a tous

je travaille depuis un certain temps a résoudre ce sujet ,

j'aimerais convertir une $variable donnée $date_depart en date UTC

et aussi en fonction d'une variable $Timezone.

la variable $Timezone peut contenir 5 differents Timezone

voici ou j'en suis rendu

et merci pour votre aide


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?php
// la variable postdate_depart qui contient la date poster par l'utilisateur
 
 
$postdate_depart = $annee_depart . "-" . $mois_depart . "-"  . $jour_depart . "" . $heure_dep . ":" . $minute_depart;
 
//$date_depart = new DateTime("2010-11-14 15:30");
 
$TimeZoneAV = 'America/Edmonton'; //cette variable provient d'une requete mysql
 
$tzD = new DateTimeZone($TimeZoneAV); // pour ajuster le timezone		
 
$date_depart->setTimezone($tzD); //pour ajuster la date depart au $TimezoneAV
 
 
$tzU = new DateTimeZone('UTC');  // timezone UTC
 
$date_depart->setTimezone($tzU); // je veux ajuster la date depart au timezonw UTC mais a partir du timezone $TimeZoneAV
 
 
 
echo'<p> L\'heure de depart UTC est: ' .$date_depart->format('Y-m-d H:i').'</p>'; // ca fonctionne pas
 
?>
__________________
Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
Mark Twain.
monlou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 07h34   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 691
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 691
Points : 3 258
Points : 3 258
Salut

On ne sait pas d'où vient $date_depart, comment il a été créé/instancié, c'est pourtant l'élément (un Objet DateTime) le plus important.


Un exemple en partant de ta date, qui elle correspond à un timeZone (America/Edmonton) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$timeZone = 'America/Edmonton';
$date = new DateTime('2010-11-14 15:30', new DateTimeZone($timeZone));
echo $date->format('d/m/Y H:i P e').'<br />';
 
$timeZone = 'UTC';
$date->setTimezone(new DateTimeZone($timeZone));
echo $date->format('d/m/Y H:i P e').'<br />';
 
$timeZone = 'Europe/Paris';
$date->setTimezone(new DateTimeZone($timeZone));
echo $date->format('d/m/Y H:i P e').'<br />';
 
$timeZone = 'Indian/Reunion';
$date->setTimezone(new DateTimeZone($timeZone));
echo $date->format('d/m/Y H:i P e').'<br />';
 
$timeZone = 'America/Edmonton';
$date->setTimezone(new DateTimeZone($timeZone));
echo $date->format('d/m/Y H:i P e').'<br />';
Affichera :
14/11/2010 15:30 -07:00 America/Edmonton
14/11/2010 22:30 +00:00 UTC
14/11/2010 23:30 +01:00 Europe/Paris
15/11/2010 02:30 +04:00 Indian/Reunion
14/11/2010 15:30 -07:00 America/Edmonton

Donc ici on a qu'un seul Objet DateTime, et à chaque fois on change de fuseau horaire.
Il faut qu'au départ le timeZone corresponde bien à la date/heure, sinon tout sera faussé.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/11/2010, 12h50   #3
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Cependant il faudrait ajouter que si le time zone n'est pas précisé lors de l'instanciation de l'objet DateTime celui définit dans le php.ini est utilisé.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/11/2010, 16h25   #4
Membre régulier
 
Avatar de monlou
 
Inscription : janvier 2010
Messages : 265
Détails du profil
Informations personnelles :
Âge : 59
Localisation : Canada

Informations forums :
Inscription : janvier 2010
Messages : 265
Points : 73
Points : 73
merci RunCodePhp,
je ne connaissais pas encore:

$date->setTimezone(new DateTimeZone($timeZone));
qui est beaucoup plus pratique et en une seule ligne en +

mais j<ai encore de la difficulté a faire accepter ma variable
$date_depart

Citation:
On ne sait pas d'où vient $date_depart, comment il a été créé/instancié, c'est pourtant l'élément (un Objet DateTime) le plus important.
Je suis tout a fait d'accord!

$date_depart provient de 5 champs SELECT dans un formulaire que l'utilisateur a entrer pour choisir le moment du depart

pourquoi 5 champs select ?

Je n'ai pas beaucoup le choix, puisque il doit choisir le jour du depart
le mois du depart, l'heure du depart ainsi que le champ minute

Select jour contient: 1 a 31 (donne la variable $jour_depart)
select mois contient: 1 a12 (donne la variable $mois_depart)
select annee: 2010-2011 (donne la variable $annee_depart)
heure contient: 1 a 23 et la derniere contient 0 (donne la variable $heure_dep)
minute contient: 15 30 45 00 (donne la variable $minute_depart


ce que je réunis comme ceci

$date_depart = $annee_depart . "-" . $mois_depart . "-" . $jour_depart . "" . $heure_dep . ":" . $minute_depart;

cependant , SetTimezone ne reconnait pas cette variable $ date_depart
__________________
Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
Mark Twain.
monlou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2010, 18h58   #5
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 691
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 691
Points : 3 258
Points : 3 258
Je t'ai mis 5 simples exemples de code, et il faut juste adapter un peu.

Aussi, réfère toi à la Doc Php.
La classe DateTime
La classe DateTimeZone


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// la variable postdate_depart qui contient la date poster par l'utilisateur
//$postdate_depart = $annee_depart . "-" . $mois_depart . "-"  . $jour_depart . "" . $heure_dep . ":" . $minute_depart;
$postdate_depart = '2010-11-14 15:30:45';
 
$TimeZoneAV = 'America/Edmonton'; //cette variable provient d'une requete mysql
$date_depart = new DateTime($postdate_depart, new DateTimeZone($TimeZoneAV));
 
$tzU = new DateTimeZone('UTC');  // timezone UTC
$date_depart->setTimezone($tzU); // je veux ajuster la date depart au timezonw UTC mais a partir du timezone $TimeZoneAV
 
echo '<p> L\'heure de depart UTC est: ' .$date_depart->format('Y-m-d H:i s').'</p>';
 
?>
Citation:
minute contient: 15 30 45 00 (donne la variable $minute_depart
L'espace ainsi que les 2 derniers 0 n'est pas correcte, ça n'est pas conforme au format standard d'un DateTime de MySQL par exemple, et pour Php aussi, ce qui provoque une erreur quand on instancie un Objet DateTime.
Le format standard est le suivant : 2010-11-14 15:30:45
Va te falloir corriger ça.


D'ailleurs, je ne comprends pas pourquoi tu as créer des champs pour séparer la date de départ.
Mettre cette date dans un seul champ DATETIME est pourtant bien plus simple, car MySQL offre quasi toutes les fonctions sur les date pour pouvoir obtenir ce qu'on veut (uniquement le jour, le mois, l'année, etc ...) si le cas se présente.
La doc MySQL pour les divers fonctions de date
Y compris Php aussi, ce qui offre tout l'embarras du choix.
Tu te complique la vie à mon sens.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/11/2010, 06h04   #6
Membre régulier
 
Avatar de monlou
 
Inscription : janvier 2010
Messages : 265
Détails du profil
Informations personnelles :
Âge : 59
Localisation : Canada

Informations forums :
Inscription : janvier 2010
Messages : 265
Points : 73
Points : 73
Merci Runcode Php pour tes exemples
c'est maintenant tout adapté !
__________________
Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
Mark Twain.
monlou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web