LINUX.ORG.RU

[php][timezone] откуда php берёт timezone?


0

1

Всем привет.

Есть проблема с php5. Не могу понять откуда он берёт timezone. В системе время правильное, в web-морде приложения по старому - на час назад. В php не рублю; вот что есть из данных:

~# cat test.php 
<?php

  echo "date - ".date("H:i");
  echo "\n";
  echo "UTC date - ".gmdate("H:i");
  echo "\n";
  $a = localtime();
  echo "localtime - ".$a[2].":".$a[1];
  echo "\n";

  echo "Set timezone to Europe/Moscow\n";
  date_default_timezone_set("Europe/Moscow");

  echo "date - ".date("H:i");
  echo "\n";
  echo "UTC date - ".gmdate("H:i");
  echo "\n";
  $a = localtime();
  echo "localtime - ".$a[2].":".$a[1];
  echo "\n";

  echo date_default_timezone_get();


?>
~# php -f test.php 
date - 11:03
UTC date - 08:03
localtime - 11:3
Set timezone to Europe/Moscow
date - 11:03
UTC date - 08:03
localtime - 11:3
~# cat t.c
#include <stdio.h>
#include <time.h>


struct tm *t;
time_t tt;

int main(void)
{

  tt = time(NULL);
  t = localtime(&tt);
  printf("%d:%d\n", t->tm_hour, t->tm_min);

  return 0;
}
~# ./a.out 
12:3
~# date -R
Fri, 18 Nov 2011 12:03:41 +0400
~# grep timezone /etc/php.ini
; Defines the default timezone used by the date functions
date.timezone = "Europe/Moscow"

Что за издевательство?

UPD. Debian 5

Ответ на: комментарий от xpahos

Debian 5

Но что-то такое подозревал, но не верил. Это ж маразм.

Lego_12239 ★★ ()

У php своя база таймзон. Говорят в последних версиях это поправлено.

Для старых можно поставить

pecl install timezonedb
baverman ★★★ ()

pecl install timezonedb помог.

php -f test.php 
date - 11:13
UTC date - 08:13
localtime - 11:13
Set timezone to Europe/Moscow
date - 11:13
UTC date - 08:13
localtime - 11:13

Ещё в php.ini добавил extension=timezonedb.so.

Спасибо всем.

Чем объясняется, что у php свои файлы зон? Чем системные плохи?

Lego_12239 ★★ ()
Ответ на: комментарий от Lego_12239

Многие мультиплатформенные штуки таскают с собой свои таймзоны - для унификации, т.к. на недоплатформах порой приходится так костылить для получения настроек локали (а с ними и таймзон), что проще притащить tzdata вместе с пакетом и брать эти настройки из единого места, используя единый API. Примеры: Java, Ruby+RoR, пых.

GateKeeper ★★ ()
Ответ на: комментарий от GateKeeper

Хрен знает, но я чаще видел, что подобные вещи делают для недоплатформ в виде прослойки так, что из исходников всё выглядит одинаково везде, как будто системное; а там где они и так есть пользуют системные.

Lego_12239 ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.