essayer cette
**`Set the default timezone`**
Vous pouvez définir votre fuseau horaire par défaut de deux façons: supposons "Europe/Paris" est le fuseau horaire que vous souhaitez définir:
Open your **`php.ini`** file in your favourite text editor and change the following line: **`date.timezone = Europe/Paris.`** You may have to restart your server in order to make this effective.
In case you don't want to meddle with your ini file you can simply set the default time zone using the following PHP function:
<?php date_default_timezone_set('Europe/Paris') ?>
List of PHP supported Timezones Mise à jour vos fuseaux horaires
Votre installation php utilise le package timezonedb disponible sur PECL.
Vous pouvez vérifier la version actuelle de votre timezonedb avec:
<?php echo timezone_version_get() ?>
Vous verrez un numéro comme celui-ci 2012,9 Wich correspondent à une date. Parfois, les fuseaux horaires sont mis à jour, si le paquet a plus d'un an, je vous suggère de mettre à jour votre timezonedb. Vous pouvez installer/mettre à jour votre version timezonedb en exécutant la commande suivante dans le terminal:
**$ sudo pecl install timezonedb**
Ne pas oublier d'ajouter la nouvelle extension php.ini et redémarrez votre serveur afin de rendre cette efficacité.
extension=timezonedb.so
* Get the User Timezone
* Laissez l'utilisateur choisir ce
Avec la fonction ci-dessus, vous avez tous les fuseaux horaires répertoriés par continents. Vous pouvez ensuite créer un menu déroulant pour les continents et une option pour chaque pays.
<?php
function timezone_options()
{
$zones = array(
'Africa', 'America', 'Antarctica', 'Arctic', 'Asia',
'Atlantatic', 'Australia', 'Europe', 'Indian', 'Pacific'
);
$list = timezone_identifiers_list();
foreach ($list as $zone) {
list($zone, $country) = explode('/', $zone);
if (in_array($zone, $zones) && isset($country) != '') {
$countryStr = str_replace('_', ' ', $country);
$locations[$zone][$zone.'/'.$country] = $countryStr;
}
}
return $locations;
}
Get it via Javascript and PHP
Time zone are written as offset from UTC in the format **±[hh]:[mm], ±[hh][mm], or ±[hh].** So if the time being described is one hour ahead of UTC (such as the time in Berlin during the winter), the zone designator would be "**+01:00", "+0100", or simply "+01".**
Vous ne pouvez pas accéder directement au fuseau horaire utilisateur via Php. Pour obtenir le fuseau horaire de l'utilisateur, vous devez obtenir son décalage et savoir si la sauvegarde de la lumière du jour est observée. Vous pouvez utiliser JavaScript pour obtenir ces informations:
function get_timezone_infos() {
var now = new Date();
var jan1 = new Date(now.getFullYear(), 0, 1, 0, 0, 0, 0);
var temp = jan1.toGMTString();
var jan2 = new Date(temp.substring(0, temp.lastIndexOf(' ') - 1));
var offset = (jan1 - jan2)/(1000);
var june1 = new Date(now.getFullYear(), 6, 1, 0, 0, 0, 0);
temp = june1.toGMTString();
var june2 = new Date(temp.substring(0, temp.lastIndexOf(' ') - 1));
var dst = offset != ((june1 - june2)/(1000));
return { offset: offset, dst: dst };
}
Base de données de stockage
D'abord la plupart, ce n'est pas vraiment difficile de dates de magasin dans une base de données. Mon choix préféré est le champ date-heure MySQL, où vous pouvez stocker la date et l'heure dans un champ. Vous devez stocker le DateTime dans le fuseau horaire UTC pour toutes les colonnes de type DateTime.
Définir le fuseau horaire DateTime UTC avant de l'enregistrer dans la base de données:
<?php
function toDatabase($dateTime)
{
$dateTime->setTimezone(new DateTimeZone('GMT'));
return $dateTime;
}
Lors de la récupération du DateTime de la base de données définie au fuseau horaire d'origine:
<?php
// set the timezone of the current user before calling the function
date_default_timezone_set('Europe/Paris');
<?php
function toUser($dateTime)
{
$dateTime->setTimezone(new DateTimeZone(date_default_timezone_get()));
return $dateTime;
}
Je ne suis pas sûr de comprendre le problème. Avez-vous de la difficulté à analyser l'entrée de formulaire et à l'alimenter à la fonction 'get_timezone_offset'? – Technoh
Vous donnez explicitement des valeurs à votre fonction. Comme vous avez mis l'Europe contre l'Asie, vous recevrez -7. Si vous voulez mettre le formulaire dedans, vous devez passer $ _POST ['timezone1'] et 2 comme arguments –
@Technoh, Oui c'est correct. En fait, ce que je veux faire est de supprimer les 'Europe/Londres', 'Asie/Shanghai' qui sont timezone1 et timezone2 et de laisser les utilisateurs rechercher l'emplacement en utilisant le formulaire fourni au format HTML. –