Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> date c параметром timestamp и без, путаница 
:(
    Опции темы
flashaa
Дата 10.1.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Недавно натолкнулся вот на что.
Получаю кое-какой таймстамп (для пример он будет равен 600 = 10 минут), затем вывожу его, вот так:
date('H-i-s', $timestamp);
И получаю 03-10-00, т.е. 3 часа откуда-то взялись. 
Это смещение от GMT, но вопрос вот в чем:
почему тогда date без timestamp-параметра cдвига GMT не происходит?
date('H-i-s') - выводит мое локальное время и не прибавляет 3 часа.
Путаница ведь какая-то.

Это сообщение отредактировал(а) flashaa - 10.1.2008, 14:15
PM MAIL   Вверх
SqueeZe
Дата 10.1.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 1.10.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Используй функцию gmdate() - параметры те же, что и у date(), но время по Гринвичу.
PM MAIL ICQ   Вверх
MoLeX
Дата 10.1.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата

Замечание: В семействе ОС Microsoft Windows системные библиотеки, реализующие эту функцию, содержат ошибки, поэтому функция gmdate() на этих системах не поддерживает отрицательные значения аргумента timestamp. 



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
SqueeZe
Дата 10.1.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 1.10.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Цитата(MoLeX @ 10.1.2008,  14:48)
Цитата

Замечание: В семействе ОС Microsoft Windows системные библиотеки, реализующие эту функцию, содержат ошибки, поэтому функция gmdate() на этих системах не поддерживает отрицательные значения аргумента timestamp. 

А когда используются отрицательные значения timestamp??? Никогда с таким не встречался.

Ага. Проверил такой код:
Код

<?
$timestamp = -600;
echo gmdate('H:i:s', $timestamp);
?>

Вывело "23:50:00", те получается, что он минусует от 24:00:00... интересно.

Между прочим, как я понимаю замечание у меня не сработало, те видимо этот баг уже устранен. 

Это сообщение отредактировал(а) SqueeZe - 10.1.2008, 16:11
PM MAIL ICQ   Вверх
MoLeX
Дата 10.1.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



SqueeZe не знаю), вот и привел отрывок из манула (не из головы выдумал я)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 10.1.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(flashaa @  10.1.2008,  14:12 Найти цитируемый пост)
Это смещение от GMT, но вопрос вот в чем:
почему тогда date без timestamp-параметра cдвига GMT не происходит?

Потому что таймстемп сам по себе по Гринвичу, а date всегда выводит локальное. В Вашем случае нулю часов десяти минутам по Гринвичу соответствуют 3:10. Только и всего. SqueeZe подсказал правильный выход smile.

Цитата(MoLeX @  10.1.2008,  14:48 Найти цитируемый пост)
функция gmdate() на этих системах не поддерживает отрицательные значения аргумента timestamp.

Это тут абсолютно ни при чем. Это касается дат до 1970 года.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
flashaa
Дата 10.1.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Насколько я понял локальный time() всегда формируется с учетом гринвича.
Т.е. если сервер расположен в московской зоне, то time() сгенерирует метку на 3 часа большую чем реальное текущее московское время )
А если выведем date('H:i'), то парсер преобразует текущее время с учетом сдвига по GMT, т.е. смотрит чему равен этот сдвиг и вычитает его... потому каждый, запуская date() у себя на локальной машине видит "свое" время, в какой часовой зоне он не находился. При этом численные значения меток timestamp, означающих одно и то же время но в разных часовых поясах, - разные.

Это сообщение отредактировал(а) flashaa - 10.1.2008, 22:14
PM MAIL   Вверх
SelenIT
Дата 11.1.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(flashaa @  10.1.2008,  22:12 Найти цитируемый пост)
При этом численные значения меток timestamp, означающих одно и то же время но в разных часовых поясах, - разные.

Логично - по определению Unix timestamp-а, отсчет которого ведется именно с полуночи по Гринвичу. Хотя помню, как в свое время сам с этим намучился, так что назвать это "очевидным" не берусь smile.



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
flashaa
Дата 11.1.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Да, для меня было не очень очевидно, что как при генерации, так и при парсинге timestamp сервер опирается на свою временную зону.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0761 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.