8288 sujets

Développement web côté serveur, CMS

Bonjour j'ai encore un petit souci.
Je travaille sur une API anglaise de retransmissions sportives. De ce fait les heures données sont des heures anglaises (de ce fait une retransmission qui commence a 21h en France est notée 20h dans l'API.). Bien sur j'aimerai que ce soit 21h affiché sur mon site
J'aimerai changer un fuseau horaire. Je ne sais pas si c'est possible
J'ai découvert l'existence de DateTimeZone.
Est-ce que DateTimeZone me permettrait d'y arriver ?
J'ai essayé sans succès.
Voici ce que j'ai fait (le $heure c'est la donnée correspondant a l'heure donnée dans l'API. Lorsque je fais un echo sur $heure, cela s'affiche bien au format britannique. j'ai défini le $matchnext dans mon foreach
$heure=$matchsnext['strTime'];
$heurefrance = new DateTime($heure, new DateTimeZone("Europe/Paris"));
echo $heurefrance;


J'ai le message d'erreur suivant :

Fatal error: Uncaught Error: Object of class DateTime could not be converted to string in C:\xampp\htdocs\sitesweb\sportsdb\php\standard\standard.php:46 Stack trace: #0 {main} thrown in C:\xampp\htdocs\sitesweb\sportsdb\php\standard\standard.php on line 46

Merci
Michel
Modifié par michel4-7 (12 Jan 2021 - 21:13)
Modérateur
Bonsoir, sans avoir de script a te proposer, l'approche ne serait pas plutôt de soustraire une heure a la valeur anglaise récuperer ?

Il me semble qu'il y a un décalage d'une semaine à prendre en compte aussi.
Merci pour ta réponse.
Oui c'est clair c'est la solution la plus évidente et la plus simple (enfin ajouter une heure à la valeur anglaise puisqu'ils ont une heure de retard sur nous, actuellement il est 20h52 en Angleterre, 20h52 + 1h = 21h52 Smiley langue ) mais j'ai un défaut, je cherche absolument à utiliser les fonctions php qui permettent de faire le travail si elles existent (et je dis bien SI car je me trompe peut-être. En fait la c'est simple parce que c'est une heure anglaise mais utiliser une fonction php si elle existe, permettrait de pallier à ce problème quelle que soit l'API, sa provenance, le fuseau horaire donné ... je cherche a apprendre et a m'améliorer quoi)
Modérateur
Il faut te servir de https://www.php.net/manual/fr/function.date-timezone-get

exemple possible :

<?php
date_default_timezone_set('Europe/London');
$madate = date("h:i:sa");
echo "l'heure anglaise est " . $madate;

$TimeZoneNameFrom="UTC";
$TimeZoneNameTo="Europe/Paris";
echo "<br>l'heure française est" . date_create($madate, new DateTimeZone($TimeZoneNameFrom))
	->setTimezone(new DateTimeZone($TimeZoneNameTo))->format("h:i:sa");
?>


mais les variables doivent être compatibles : ton code erreur DateTime could not be converted to string . c'est là que tu dois creuser sur ton script et ce que te retourne ton API de façon à avoir un format utilisable. Smiley cligne

voir eventuellement https://www.php.net/manual/fr/function.strtotime.php (sans ton script et la chaine renvoyée, difficile de savoir exactement ce qui coince ).
Modifié par gcyrillus (12 Jan 2021 - 22:32)
Merci c'est cool. Je vais étudier tout ça.
J'ai résolu mon problème en ajoutant une heure mais si je peux le faire avec une méthode TimeZone, je préfère.
Concernant la fonction strtotime, je l'utilise pour changer le format de la date (par exemple l'API est au format 2021/01/12 et j ai utilisé cette fonction pour mettre la date au format français 12/01/2021)
Encore merci pour ton script
Modifié par michel4-7 (12 Jan 2021 - 23:13)