Почему Zend_Date учитывает только часовые пояса при разборе? - PullRequest
1 голос
/ 06 августа 2009

Я работаю с Zend 1.8. Я установил часовой пояс по умолчанию для Европы / Хельсинки, и я разбираю строку, которая выглядит следующим образом:

2009-08-06

с таким утверждением:

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

Создает такую ​​дату:

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)
}

Так что, видимо, он знает часовой пояс. Однако, когда я пытаюсь получить строковое представление даты, я получаю не 2009-08-06, а 2009-08-05 23:00:00 - время UTC. Что дает?

Редактировать: Я также добавил ответ, но примечание к скале: Zend_Date :: getDate () не работает, а не разбирает или печатает биты.

Ответы [ 3 ]

2 голосов
/ 09 августа 2009

Ну, как обычно, мои предположения были ошибочны. Я вернулся, чтобы проверить все шаги, которые могут пойти не так, и как это происходит, часовые пояса работают нормально при разборе и печати. Проблема в том, что Zend_Date :: getDate (). В документации сказано следующее:

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

Однако, когда я фактически использую это:

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

Результат

Aug 8, 2009 11:00:00 PM

Это определенно не 00:00:00.

Это похоже на Zend Bug 4490 , хотя якобы оно решено в 1.7.0 и я использую 1.8.1. Я думаю, мне придется снова открыть ошибку.

1 голос
/ 06 августа 2009

Вы пытались установить локаль в реестре? Примерно так:

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

(адаптировано к вашей локали, конечно)

Поможет ли это?

0 голосов
/ 07 августа 2009

Посмотрите на Zend_Date __construct DocBlock:

  • Всегда устанавливайте часовой пояс по умолчанию: http://php.net/date_default_timezone_set
  • Например, в вашей начальной загрузке: date_default_timezone_set ('America / Los_Angeles');
  • Подробные инструкции см. В документе.

Если это так, возможно, вам нужно добавить локаль к вызову, например.

Zend_Date ($ СТРОКА-ДАТЫ 'Формат', 'de_DE');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...