2009-08-06 6 views
1

Je travaille avec Zend 1.8. Je me suis fixé le fuseau horaire par défaut en Europe/Helsinki, et je suis analyse d'une chaîne qui ressemble à ceci:Pourquoi Zend_Date ne prend-il en compte que les fuseaux horaires lors de l'analyse?

2009-08-06 

avec une déclaration comme celle-ci:

new Zend_Date($dateStr, 'YYYY-MM-dd'); 

Il produit une date comme celui-ci :

object(Zend_Date)#53 (8) { 
    ["_locale:private"]=> 
    string(5) "en_US" 
    ["_fractional:private"]=> 
    int(0) 
    ["_precision:private"]=> 
    int(3) 
    ["_unixTimestamp:private"]=> 
    string(10) "1249502400" 
    ["_timezone:private"]=> 
    string(15) "Europe/Helsinki" 
    ["_offset:private"]=> 
    int(-7200) 
    ["_syncronised:private"]=> 
    int(0) 
    ["_dst:protected"]=> 
    bool(true) 
} 

Ainsi, il connaît apparemment le fuseau horaire. Cependant, quand j'essaie d'obtenir une représentation sous forme de chaîne de la date, ce que je reçois n'est pas 2009-08-06, mais plutôt 2009-08-05 11:00:00 PM - l'heure UTC. Ce qui donne? Edit: J'ai ajouté une réponse, mais les notes de la falaise versio est, Zend_Date :: getDate() est cassé, pas l'analyse ou l'impression de bits.

+1

Pas vraiment lié, mais important: Pour que vous sachiez, le formateur d'année 'YYYY' vous donne une année ISO, ce qui est un peu différent de ce que vous attendez. Ce n'est pas la cause de votre problème, mais un problème très commun avec Zend_Date.Vous devriez probablement utiliser 'yyyy' – jason

+0

Pouvez-vous s'il vous plaît poster la ligne de code que vous utilisez pour générer la sortie? – jason

Répondre

2

Eh bien, comme d'habitude, mes hypothèses étaient erronées. Je suis retourné pour vérifier toutes les étapes qui pourraient mal tourner, et en l'occurrence, les fuseaux horaires fonctionnent bien lors de l'analyse et de l'analyse. Le problème est Zend_Date :: getDate(). La documentation indique ce qui suit:

Returns a clone of $this, with the time part set to 00:00:00. 

Cependant, quand je l'utilise réellement:

$date = Zend_Date::now(); 
$date = $date->getDate(); 

Le résultat est

Aug 8, 2009 11:00:00 PM 

Maintenant, c'est décidément pas 0:00:00.

Cela ressemble à Zend Bug 4490, bien qu'il soit supposément résolu en 1.7.0 et que je cours en version 1.8.1. Je suppose que je vais devoir rouvrir le bug.

1

Avez-vous essayé de définir une locale dans le Registre? Quelque chose comme ça:

$locale = new Zend_Locale('fr_FR'); 
Zend_Registry::set('Zend_Locale', $locale); 

(adapté à votre environnement local, bien sûr)

Serait-il utile?

+0

Oui, en effet, il le ferait! – Rytmis

+0

Pas d'attente, fausse alarme, désolé! (Mauvais test) – Rytmis

+0

Ergh, dommage :- (désolé à ce sujet, alors :-( –

0

Regardez le Zend_Date __construct DocBlock:

  • Réglez toujours le fuseau horaire par défaut: http://php.net/date_default_timezone_set
  • Par exemple, dans votre bootstrap: date_default_timezone_set ('America/Los_Angeles');
  • Pour des instructions détaillées, veuillez consulter le docu.

Si oui, vous devez peut-être ajouter les paramètres régionaux à l'appel, par exemple.

Zend_Date ($ dateStr, 'Format', 'de_DE');

+0

Si vous regardez à nouveau ma question, vous remarquerez que la deuxième phrase commence par "J'ai défini le fuseau horaire par défaut en Europe/Helsinki "Et les paramètres régionaux n'a aucun effet sur le décalage horaire, tout ce qu'il fait est de contrôler le format d'entrée et de sortie. – Rytmis

Questions connexes