Forum Webscript.Ru
Программирование => Perl => Тема начата: apost от 27 Февраля 2003, 19:41:19
-
Hi
Для получения даты на perl-е я пишу:
$date_command = "/bin/date"; #команда даты
$date = `$date_command +"%d.%m.%Y, %H:%M."`; chop($date);
Вообщем вроде все хорошо, только хостинг провайдер в другом часовом поясе и системная дата ОТЛИЧАЕТСЯ на несколько часов. Помогите чайнику, как получить дату со смещением на несколько часов.
-
Оригинальный способ получения даты.
Но легче всеже использовать localtime для этих вещей.
А здесь тебе нужно распарсить полученное значение, пробавить (или отнять) часы.
В таком случае регэксп и вперед.
Ну и под виндой, сам понимаешь...
-
$dif = +3; #разница в часах
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
print ($hour+$dif), ":".$min.":".$sec.":" ....
где-то так
-
Интересный вариант. А что будет в 23-00 23+3=26 часов
-
я тоже об этом подумал. лечится просто.
if(($hour+$dif) >23 ) {
$H = $hour+$dif-24;
$D++;
}
.. и тут меня озарило, что так придется страдать и с днями и месяцами. Довольно большая ф-ция получится. хм..
-
Не нужно ничего придумывать.
Все уже придумано до нас.
$smeschenie = 60*60*2; #Плюс два часа.
$time=time + $smeschenie;
$time=localtime($time);
-
:)
-
$smeschenie = 60*60*2; #Плюс два часа.
$time=time + $smeschenie;
$time=localtime($time);
_______
Просто супер
Единственный минус - в неудобном формате выдает дату.
Fri Feb 28 18:34:23 2003
Или я совсем чайник, но не получается у меня дату в нормальном виде получить:
число:месяц:год часы:минуты
может черкнете, а то совсем замучался.....
-
$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";
-
:)
-
:) Задачка:
Как явно не задавать разницу в часах, а определять ее?
(до GMT, например, а московское считать от него)
(решение есть) :)
-
Chs Есть модуль. Подсказать название? :)
-
Есть модуль. Подсказать название?
Не-а, tnx.
Я в свое время смотрел - в итоге сделал без модуля.
За пару операторов.:) Тут скорее важна идея - пусть народ подумает.:)
-
> Как явно не задавать разницу в часах, а определять ее?
Какую разницу нужно определить? В любом случае нужно задать разницу. Можно задать разницу между GMT и желаемым временем (тогда при переносе сервера не придется ничего менять), но все равно ее нужно ЗАДАТЬ. Определить можно только сравнивая с клиентским временем, но это еще более кривое решение, мало ли какое время у клиента стоит.
-
localtime(time)[2] - gmtime(time)[2]
Но, насколько я понимаю, это даст разницу между часовым поясом _сервера_ (а не клиента) и Гринвичем. Даже если часы на сервере идут неправильно.
А вот ещё одна задачка: определите часовой пояс клиента. (Решения у меня нет, но оно мне очень нужно :))
-
А вот ещё одна задачка: определите часовой пояс клиента.
Ээээ...javascript и передать скрипту, но это не очень надежно.
-
Просто еще один вариант:
use strict;
my $shift = 3;
printf ("%04d-%02d-%02d %02d:%02d\\n", sub{($_[5]+1900,$_[4]+1,$_[3],$_[2],$_[1])}->(localtime(time+(3600*$shift))));
-
В 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."
=========================
Соответственно это значение можно передать на сервер. Сам не пробовал, но идея вроде верная.