Forum Webscript.Ru

Программирование => Perl => Тема начата: apost от 27 Февраля 2003, 19:41:19

Название: дата. Разница в часовых поясах
Отправлено: apost от 27 Февраля 2003, 19:41:19
Hi
Для получения даты на perl-е я пишу:

$date_command = "/bin/date"; #команда даты
$date = `$date_command +"%d.%m.%Y, %H:%M."`; chop($date);

Вообщем вроде все хорошо, только хостинг провайдер в другом часовом поясе и системная дата ОТЛИЧАЕТСЯ на несколько часов. Помогите чайнику, как получить дату со смещением на несколько часов.
Название: дата. Разница в часовых поясах
Отправлено: NeoNox от 27 Февраля 2003, 20:25:39
Оригинальный способ получения даты.
Но легче всеже использовать localtime для этих вещей.
А здесь тебе нужно распарсить полученное значение, пробавить (или отнять) часы.
В таком случае регэксп и вперед.
Ну и под виндой, сам понимаешь...
Название: дата. Разница в часовых поясах
Отправлено: Croaker от 28 Февраля 2003, 12:47:10

$dif = +3; #разница в часах

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

print ($hour+$dif), ":".$min.":".$sec.":" ....


где-то так
Название: hi Croaker
Отправлено: apost от 28 Февраля 2003, 13:02:54
Интересный вариант. А что будет в 23-00 23+3=26 часов
Название: дата. Разница в часовых поясах
Отправлено: Croaker от 28 Февраля 2003, 13:25:38
я тоже об этом подумал. лечится просто.


if(($hour+$dif) >23 ) {
 $H = $hour+$dif-24;
 $D++;
}

.. и тут меня озарило, что так придется страдать и с днями и месяцами. Довольно большая ф-ция получится. хм..
Название: дата. Разница в часовых поясах
Отправлено: NeoNox от 28 Февраля 2003, 13:37:03
Не нужно ничего придумывать.
Все уже придумано до нас.
$smeschenie = 60*60*2; #Плюс два часа.
$time=time + $smeschenie;
$time=localtime($time);
Название: дата. Разница в часовых поясах
Отправлено: Croaker от 28 Февраля 2003, 13:54:37
:)
Название: спасибо огромное, особенно NeoNox
Отправлено: apost от 28 Февраля 2003, 18:44:01
$smeschenie = 60*60*2; #Плюс два часа.
$time=time + $smeschenie;
$time=localtime($time);
_______
Просто супер
Единственный минус - в неудобном формате выдает дату.
Fri Feb 28 18:34:23 2003
Или я совсем чайник, но не получается у меня дату в нормальном виде получить:

число:месяц:год   часы:минуты    
может черкнете, а то совсем замучался.....
Название: дата. Разница в часовых поясах
Отправлено: NeoNox от 28 Февраля 2003, 18:58:42
$smeschenie = 60*60*2; #Плюс два часа.
$time=time + $smeschenie;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
$year += 1900;
$mon++;
print "$mday:$mon:$year $hour:$min";
Название: :)
Отправлено: apost от 28 Февраля 2003, 21:23:50
:)
Название: дата. Разница в часовых поясах
Отправлено: Chs от 28 Февраля 2003, 22:18:42
:) Задачка:
Как явно не задавать разницу в часах, а определять ее?
(до GMT, например, а московское считать от него)
(решение есть) :)
Название: дата. Разница в часовых поясах
Отправлено: NeoNox от 01 Марта 2003, 00:09:11
Chs Есть модуль. Подсказать название? :)
Название: дата. Разница в часовых поясах
Отправлено: Chs от 01 Марта 2003, 12:57:17
Цитировать
Есть модуль. Подсказать название?

Не-а, tnx.
Я в свое время смотрел - в итоге сделал без модуля.
За пару операторов.:) Тут скорее важна идея - пусть народ подумает.:)
Название: дата. Разница в часовых поясах
Отправлено: КшЫуфксрук от 01 Марта 2003, 18:39:58
> Как явно не задавать разницу в часах, а определять ее?

Какую разницу нужно определить? В любом случае нужно задать разницу. Можно задать разницу между GMT и желаемым временем (тогда при переносе сервера не придется ничего менять), но все равно ее нужно ЗАДАТЬ. Определить можно только сравнивая с клиентским временем, но это еще более кривое решение, мало ли какое время у клиента стоит.
Название: дата. Разница в часовых поясах
Отправлено: Е. Перлов от 09 Марта 2003, 19:34:05
localtime(time)[2] - gmtime(time)[2]

Но, насколько я понимаю, это даст разницу между часовым поясом _сервера_ (а не клиента) и Гринвичем. Даже если часы на сервере идут неправильно.

А вот ещё одна задачка: определите часовой пояс клиента. (Решения у меня нет, но оно мне очень нужно :))
Название: дата. Разница в часовых поясах
Отправлено: Chs от 09 Марта 2003, 21:45:33
Цитировать
А вот ещё одна задачка: определите часовой пояс клиента.

Ээээ...javascript и передать скрипту, но это не очень надежно.
Название: дата. Разница в часовых поясах
Отправлено: vladsu от 12 Марта 2003, 19:51:32
Просто еще один вариант:

use strict;

my $shift = 3;

printf ("%04d-%02d-%02d %02d:%02d\\n", sub{($_[5]+1900,$_[4]+1,$_[3],$_[2],$_[1])}->(localtime(time+(3600*$shift))));
Название: дата. Разница в часовых поясах
Отправлено: PROnya от 13 Марта 2003, 09:33:43
В JavaScript у объекта Date есть метод getTimezoneOffset.
Цитата с http://wdh.suncloud.ru/js11.htm#mgettimezoneoffset :

=========================
"Метод getTimezoneOffset возвращает разницу в минутах между временем UTC и местным временем (т. е. временем компьютера, на котором выполняется сценарий). Из-за переходов на летнее и зимнее время эта разница в течение года может изменяться. Для перевода местного времени в UTC следует прибавить к нему полученное значение.

Если, например, следующий сценарий

var today = new Date();
document.write(today.getTimezoneOffset() / 60);

выполняется на компьютере, находящемся в Екатеринбурге, то он выведет на экран обозревателя число -6. Это означает, что время в Екатеринбурге на 6 часов больше, чем UTC."
=========================

Соответственно это значение можно передать на сервер. Сам не пробовал, но идея вроде верная.