Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: странный результат gmmktime
 
 автор: Саша   (02.09.2008 в 23:14)   письмо автору
 
 

Здравствуйте. Помогите понять.


<?
$stamp 
gmmktime();
$stamp2 mktime();
echo 
"$stamp $stamp2<br>";
?>


почему результат $stamp равен $stamp2 ?

Оисание

Функция gmmktime — Возвращает метку времени Unix для времени по Гринвичу


Но что метка с моего сервака, что по гринвичу одинаково. Хотя gmdate возвращает результат , вроди по гринвичу, т.е. несколько часов назад мотает.

Спасибо

  Ответить  
 
 автор: Trianon   (03.09.2008 в 01:34)   письмо автору
 
   для: Саша   (02.09.2008 в 23:14)
 

Вы же не задали ни один аргумент?
Поэтому и одинаково.
Часовые пояса влияют на человеческое представление времени.
unix-timestamp всегда считается по Гринвичу и одного объекта - для любого пояса одинаков.

  Ответить  
 
 автор: Саша   (03.09.2008 в 12:49)   письмо автору
 
   для: Trianon   (03.09.2008 в 01:34)
 

Смотрите еще пример

<?

$stamp 
gmmktime();
$stamp2 mktime();

echo 
date("Y-m-d H:i",$stamp);echo " gmstamp<br>";
echo 
date("Y-m-d H:i");echo " date<br>";
echo 
gmdate("Y-m-d H:i");echo " gmdate<br>";
echo 
gmdate("Y-m-d H:i",$stamp);echo " gmdate stamp<br>";

?>


2008-09-03 15:11 gmstamp
2008-09-03 11:11 date
2008-09-03 07:11 gmdate
2008-09-03 11:11 gmdate stamp




Почему gmdate генерирует дату -4 часа, а gmmktime(); +4 часа?

  Ответить  
 
 автор: Trianon   (03.09.2008 в 13:58)   письмо автору
 
   для: Саша   (03.09.2008 в 12:49)
 

Что-то Вы напутали.
У меня Ваш скрипт выдал (2 минуты назад)

2008-09-03 13:56 gmstamp
2008-09-03 13:56 date
2008-09-03 09:56 gmdate
2008-09-03 09:56 gmdate stamp


все ожидаемо:
верхние две строки по местному времени (MSD)
нижние - по UTC

  Ответить  
 
 автор: Саша   (03.09.2008 в 14:22)   письмо автору
 
   для: Trianon   (03.09.2008 в 13:58)
 

Ну да, на виндовсе, т.е. локалхосте у меня

2008-09-03 13:14 gmstamp
2008-09-03 13:14 date
2008-09-03 10:14 gmdate
2008-09-03 10:14 gmdate stamp


ну вот тот же скрипт на хостинге

2008-09-03 18:38 gmstamp
2008-09-03 14:38 date
2008-09-03 10:38 gmdate
2008-09-03 14:38 gmdate stamp


Но, вот $stamp = gmmktime(); и echo date("Y-m-d H:i",$stamp);echo " gmstamp<br>"; разве не должно было возвратить не локальное время, а по гринвичу, т.е. 10?

  Ответить  
 
 автор: Trianon   (03.09.2008 в 14:41)   письмо автору
 
   для: Саша   (03.09.2008 в 14:22)
 

Значит хостер где-то налажал.
не должно.
date выводит время в рамках текущей локали и её таймзоны.

  Ответить  
 
 автор: Саша   (03.09.2008 в 14:51)   письмо автору
 
   для: Trianon   (03.09.2008 в 14:41)
 

>Значит хостер где-то налажал.
>не должно.
Вот попробовал еще на 2 разных серверах (freebsd)
server2

2008-09-03 16:56 gmstamp
2008-09-03 13:56 date
2008-09-03 10:56 gmdate
2008-09-03 13:56 gmdate stamp


server3

2008-09-03 16:47 gmstamp
2008-09-03 13:47 date
2008-09-03 10:47 gmdate
2008-09-03 13:47 gmdate stamp


>date выводит время в рамках текущей локали и её таймзоны.
Ну да, согласен. Но $stamp содержит метку времени, сгенереную по гринвичу? Не так ли? Т.е. date в даном варинте передается метка времени и она должна отобразить дату относительной этой метки, т.е. я ожидал, что date("Y-m-d H:i",gmmktime()) эквивалетно gmdate("Y-m-d H:i").

  Ответить  
 
 автор: Trianon   (03.09.2008 в 15:23)   письмо автору
 
   для: Саша   (03.09.2008 в 14:51)
 

>>date выводит время в рамках текущей локали и её таймзоны.
>Ну да, согласен. Но $stamp содержит метку времени, сгенереную по гринвичу?
Метка времени всегда генерируется по гринвичу. Точнее - по UTC.
обычные time(), mktime() и т.п. возвращают метки по UTC.

>Т.е. date в даном варинте передается метка времени и она должна отобразить
>дату относительной этой метки,

date передается некое число. Функция должна его преобразовать , не зная как именно это число было получено.

>т.е. я ожидал, что date("Y-m-d H:i",gmmktime()) эквивалетно gmdate("Y-m-d H:i").

зря.

Вызов gmmktime без указания параметров вообще лишен смысла.
Для этого есть функция time()

  Ответить  
 
 автор: Саша   (03.09.2008 в 15:58)   письмо автору
 
   для: Trianon   (03.09.2008 в 15:23)
 

Вроди разобрался, спасибо, Trianon )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования