|
|
|
| Здравствуйте. Помогите понять.
<?
$stamp = gmmktime();
$stamp2 = mktime();
echo "$stamp $stamp2<br>";
?>
|
почему результат $stamp равен $stamp2 ?
Оисание
Функция gmmktime — Возвращает метку времени Unix для времени по Гринвичу
|
Но что метка с моего сервака, что по гринвичу одинаково. Хотя gmdate возвращает результат , вроди по гринвичу, т.е. несколько часов назад мотает.
Спасибо | |
|
|
|
|
|
|
|
для: Саша
(02.09.2008 в 23:14)
| | Вы же не задали ни один аргумент?
Поэтому и одинаково.
Часовые пояса влияют на человеческое представление времени.
unix-timestamp всегда считается по Гринвичу и одного объекта - для любого пояса одинаков. | |
|
|
|
|
|
|
|
для: 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 часа? | |
|
|
|
|
|
|
|
для: Саша
(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 | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|
|
|
|
|
для: Саша
(03.09.2008 в 14:22)
| | Значит хостер где-то налажал.
не должно.
date выводит время в рамках текущей локали и её таймзоны. | |
|
|
|
|
|
|
|
для: 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"). | |
|
|
|
|
|
|
|
для: Саша
(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() | |
|
|
|
|
|
|
|
для: Trianon
(03.09.2008 в 15:23)
| | Вроди разобрался, спасибо, Trianon ) | |
|
|
|