Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа с датой...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
armancho7777777 Супермодератор
Отправлено: 15 Июня, 2012 - 22:58:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Всем привет!
Дело такого рода:
пытаюсь вывести дату с учётом смещения по Гринвичу:

Выводит на час меньше.
Т.е. вместо 23:00 выводит 22:00.
Хотя если установить временную зону по средством функции date_default_timezone_set(), то время верное.
Что не так делаю, подскажите пожалуйста.

(Отредактировано автором: 15 Июня, 2012 - 23:00:00)

 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Июня, 2012 - 00:25:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




armancho7777777, в таких скользких делах лучше использовать встроенный класс для работы с датами:
http://www.php.net/manual/en/class.datetime.php
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2012 - 09:32:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Не вижу разницы в результате.
 
 Top
Panoptik
Отправлено: 16 Июня, 2012 - 10:50:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




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


-----
Just do it
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2012 - 10:59:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Да нет.
Да и здесь, на сайте, я установил разницу во времень +5, но отображает на час меньше.
Хотя разница между Москвой и Иркутском +5.
Т.е. разница с текущим времение на этом сервере и Москвой +1.
(Добавление)
Panoptik пишет:
московское время отличается от предустановленного на сервере

Одинаковое.
 
 Top
Panoptik
Отправлено: 16 Июня, 2012 - 11:13:53
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




для наглядности диалога лучше привести конкретные данные, скажем в виде таблицы
текущее время по факту, ткущую зону(вашу тоесть), время по UTC, время сервера, его таймзону и время которое ожидается

а то как то всё слишком запутанно получается)

(Отредактировано автором: 16 Июня, 2012 - 11:14:47)



-----
Just do it
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2012 - 11:37:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




текущее время по факту - 17:30
текущая зона(моя) - Asia/Irkutsk
время по UTC - 12:30
время сервера - 12:30
таймзона сервера - Europe/Moscow
время которое ожидается - 17:30

Суть в том, что если я устанавливаю таймзону

то время показывает правильно: 17:30
Но если я пытаюсь вывести дату с учётом смещения по Гринвичу (таймзона при этом Europe/Moscow):

То выводит 16:30 вместо 17:30

(Отредактировано автором: 16 Июня, 2012 - 11:59:27)

 
 Top
Мелкий Супермодератор
Отправлено: 16 Июня, 2012 - 12:15:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




armancho7777777 пишет:
пытаюсь вывести дату с учётом смещения по Гринвичу (таймзона при этом Europe/Moscow):

А чего вы пытаетесь добиться-то, удваивая смещение временной зоны? time возвращает время для UTC+4, вы добавляете ещё раз 4 часа, получаете UTC+8
(Добавление)
armancho7777777 пишет:
время по UTC - 12:30
время сервера - 12:30
таймзона сервера - Europe/Moscow

Одно из этих условий ложно, т.к. противоречивы.


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2012 - 12:37:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Мелкий пишет:
получаете UTC+8

Вот именно, что должно получиться, но не получается, судя по результату.


'Asia/Irkutsk' есть UTC+8.
И при date_default_timezone_set('Asia/Irkutsk') выводит как и должно: 17:30.
Но если date_default_timezone_set('Europe/Moscow')
и вывожу

То выводит 16:30. А должно быть 17:30.
(Добавление)
Мелкий пишет:
Одно из этих условий ложно, т.к. противоречивы.

С чего это ?)
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. date_default_timezone_set('Europe/Moscow');
  3.  
  4. $date = new DateTime();
  5. $dtz = new DateTimeZone('UTC');
  6.  
  7. $d = DateTime::createFromFormat('d/m/Y H:i', $date->format('d/m/Y H:i'), $dtz);
  8. echo $d->format("H:i");  // 13:45        
  9. echo '<br>';
  10. echo date("H:i");  // 13:45
  11.  

(Отредактировано автором: 16 Июня, 2012 - 12:50:56)

 
 Top
Мелкий Супермодератор
Отправлено: 16 Июня, 2012 - 12:59:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




armancho7777777 пишет:
'Asia/Irkutsk' есть UTC+8

UTC+9 же.
Сами пишете, что с Москвой 5 часов разница, а Москва UTC+4.

armancho7777777 пишет:
С чего это ?)

Потому что для Гринвича 12:30 = 16:30 в Москве и 21:30 в Иркутске.
На момент цитируемого сообщения UTC+0 был 8:30.


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2012 - 13:13:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Блин, да Вы что?
Почему разница между двумя выводами в 1 час?
PHP:
скопировать код в буфер обмена
  1.  
  2. date_default_timezone_set('Asia/Irkutsk');
  3. echo date('H:i', time()); // 19:12
  4.  
  5. date_default_timezone_set('Europe/Moscow');
  6. echo '<br>'.date('H:i', time() + date('Z'));  // 18:12
  7.  

(Отредактировано автором: 16 Июня, 2012 - 13:14:18)

 
 Top
Мелкий Супермодератор
Отправлено: 16 Июня, 2012 - 13:15:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Потому что date('Z') - 4 часа, Москва в UTC+4. А между Москвой и Иркутском - 5. Так с чего им сходиться-то?


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2012 - 13:17:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Я уже сам запутался))
Короче, вопрос: как получить верное время с учётом смещения?
А точнее, как получить эту самую разницу в 5 часов?
(Добавление)
Да и здесь, текущее время на сервере показывает 13:26.
Почему? Тут оно разве не московское? А оно 14:26

(Отредактировано автором: 16 Июня, 2012 - 13:26:02)

 
 Top
Мелкий Супермодератор
Отправлено: 16 Июня, 2012 - 13:33:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Да, увеличиваете. (я, правда, всё равно не понимаю, зачем удваивать текущую таймзону. Ещё в Магане попробуйте удвоить - вообще в другой день попадёте)
Но на 4 часа, а не 5 нужных, чтобы получить Иркутское время.

armancho7777777 пишет:
date_default_timezone_set('Asia/Irkutsk');
echo date('H:i', time()); // 19:12

Поставить таймзону Иркутск, вернуть время с учётом таймзоны, из юникстайма, опять же с учётом таймзоны.

armancho7777777 пишет:
date_default_timezone_set('Europe/Moscow');
echo '<br>'.date('H:i', time() + date('Z')); // 18:12

Поставить таймзону Москва.
Взять юникстайм (с учётом таймзоны), прибавить разницу во времени с Гринвичем (4 часа, напомню, для этой таймзоны), из полученного вывести время.
Получили удвоенную таймзону, только и всего.


-----
PostgreSQL DBA
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2012 - 13:37:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Мелкий пишет:
(я, правда, всё равно не понимаю, зачем удваивать текущую таймзону

Я не удваиваю, а пытаюсь сместить время с учётом смещения по Гринвичу.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB