2010-08-16 4 views
1

Depuis PHP5.3 (je pense), il est devenu une exigence pour le date.timezone à définir dans le fichier php.ini, ou pour être défini à l'exécution via la fonction date_default_timezone_set(). Lorsque vous ne définissez pas cette valeur que vous obtenez, une erreur, quelque chose le long des lignes de celle-ci:Guessing TimeZone utilisateur en PHP

PHP Attention: date(): Il est sûr de compter sur les paramètres de fuseau horaire du système. Vous devez utiliser pour utiliser le paramètre date.timezone ou la fonction date_default_timezone_set(). Si vous utilisez l'une de ces méthodes et que vous recevez toujours cet avertissement, vous avez probablement mal orthographié l'identifiant du fuseau horaire. Nous avons choisi l'Amérique/New_York 'pour '-4,0/DST' au lieu dans FICHIER en ligne LIGNE.

Je me demandais ce mécanisme qu'il utilise pour deviner le fuseau horaire, comme il semble être assez précis, et je voulais savoir pour moi-même donc je peux présenter cette erreur d'une manière plus conviviale à l'utilisateur, ou permettre les accepter comme le fuseau horaire correct.

+0

Je sais que cela est non évident, mais je ne suis pas ** ** faire cela pour le développement web. J'utilise PHP dans cette instance dans une application qui s'exécute sur le bureau d'un client. –

Répondre

4

Je serais probablement utiliser la fonction date_default_timezone_get():

string date_default_timezone_get (void ) 

Par ordre de préférence, cette fonction renvoie le fuseau horaire par défaut par:

  • lecture du jeu de fuseau horaire en utilisant le date_default_timezone_set ( fonction (le cas échéant)
  • Lecture de la variable d'environnement TZ (si non vide) (Avant PHP 5.3.0)
  • Lecture de la valeur de l'option date.timezone (si défini)
  • Interrogation du système d'exploitation hôte (si supporté et autorisé par le système d'exploitation )

http://www.php.net/manual/en/function.date-default-timezone-get.php

+0

Je me sens comme un douché. –

+2

C'est bon. Tout le monde a des pets de cerveau, il suffit de regarder ma liste de questions! ;) –

8

L'approche de Mike vous donne uniquement le fuseau horaire du serveur Web. Je crois que vous essayez d'obtenir le fuseau horaire de l'utilisateur. J'ai écrit une fonction en utilisant jQuery et PHP. Ceci est testé, et fonctionne!

Sur la page PHP où vous voulez avoir le fuseau horaire en tant que variable, ont ce bout de code quelque part près du haut de la page:

<?php  
    session_start(); 
    $timezone = $_SESSION['time']; 
?> 

Cela lire la variable de session « temps », que nous sommes sur le point de créer.

Sur la même page, dans la, vous devez d'abord inclure jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 

également dans le, au-dessous du jQuery, collez:

<script type="text/javascript"> 
    $(document).ready(function() { 
     if("<?php echo $timezone; ?>".length==0){ 
      var visitortime = new Date(); 
      var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60; 
      $.ajax({ 
       type: "GET", 
       url: "http://domain.com/timezone.php", 
       data: 'time='+ visitortimezone, 
       success: function(){ 
        location.reload(); 
       } 
      }); 
     } 
    }); 
</script> 

Vous pouvez ou pas remarqué, mais vous devez changer l'URL de votre domaine actuel.

Une dernière chose. Vous vous demandez probablement ce que le diable timezone.php est. Eh bien, il est tout simplement ceci: (créer un nouveau fichier appelé timezone.php et le point à avec l'URL ci-dessus)

<?php 
    session_start(); 
    $_SESSION['time'] = $_GET['time']; 
?> 

Si cela fonctionne correctement, il va d'abord charger la page, exécutez le code JavaScript et rechargez la page. Vous pourrez alors lire la variable $ timezone et l'utiliser à votre guise! Il retourne l'heure UTC/GMT actuelle zone de décalage (GMT -7) ou tout autre fuseau horaire que vous êtes.

Vive

</Westy92>

+0

C'est plutôt cool. Je ne cherchais pas le fuseau horaire du client, mais je vais utiliser ce code dans un autre de mes projets. Très bon travail. –

+0

Ceci renvoie le fuseau horaire actuel de l'utilisateur * décalage *. Si vous voulez deviner le fuseau horaire * actuel de l'utilisateur, alors vous devez faire quelque chose de plus élaboré comme [jsTimeZoneDetect] (http://pellepim.bitbucket.org/jstz/). –