Сравнение двух дат в unixtime

trasherz

Новичок
Сравнение двух дат в unixtime

Всем привет.
У меня есть дата в unixtime - время регистрации юзверя на моем ресурсе.
Я хочу написать скрипт, который сравнивал бы текущее время и время регистрации, и исходя из результатов сравнения, выдавал, что юзер больше двух лет на ресурсы или нет.

Я думаю, что надо к времени регистрации прибавить два года и из полученной даты вычесть текущую дату, и если результат неотрицательный и не равен нулю, то юзверь больше двух лет на ресурсе.

Так вот, подскажите, пожалуйста, как это осуществить программно, а то с unixtime'ом не работал.
 

bkonst

.. хочется странного?...
unixtime - это количество секунд с начала "Unix-эры". Посчитай, сколько секунд в годе и вычти из текущего значения.
 

trasherz

Новичок
о_О Сам замучаюсь считать.. Это же надо учитывать ещё и переход на зимнее/летнее время..
Может, где-нибудь уже посчитано?
 

bkonst

.. хочется странного?...
Зачем учитывать переход? Переходы, часовые пояса и прочее - это относится к часовой зоне.

См mktime

~~~

И localtime
 

trasherz

Новичок
Вот что получилось.
Кол-во секунд в двух годах подсказал гугл.
Вроде работает нормально, пробывал много значений $joined.
Какие ошибки могут возникнуть?
PHP:
<?
$joined = 1137913733;
$y = 63113852;
$time = time();
$tr = $time - $joined;
if ($tr > $y) { $old = 1; } else { $old = 0; }
echo $old;
?>
 

SiMM

Новичок
> Какие ошибки могут возникнуть?
Связанные с високосностью
PS: надо же такой простой код настолько нечитаемо написать.
 

bkonst

.. хочется странного?...
В високосном годе на 24*60*60=86400 секунд больше.
 

alan4ick

Guest
хм, а можно и не мучиться с расчетами, вот так

PHP:
if( strtotime("+ 2 year",$reg_timestamp)>=time() ){
 echo "Вы уже 2 года с нами";
}
и т.д.
 

trasherz

Новичок
alan4ick, в твоем методе есть один минус. Если юзер зарегился два года назад, в 19:00 по GMT, то сегодня, в 18:00 по GMT, он ещё не будет считаться, как зареганным два года назад.
Можно как-то без часов сделать? Всмысле, чтобы в 00:00 все те, кто зарегался два года назад в этот день, независимо от часов, минут, считались зареганными уже два года.
 

bkonst

.. хочется странного?...
Localtime разбирает UNIX-time на составляющие (год, месяц .... секунда). После этого можно поправить год, убрать час/минуту/секунду и собрать (mktime) в новый Unix-time, с которым и сравнивать время регистрации.
 

alan4ick

Guest
trasherz
а важен ли пользователю этот час ?
и указывают ли у тебя пользователи часовой сдвиг ?
 

trasherz

Новичок
alan4ick, час довольно важен =).
Пользователи все из одного города, сдвиг у всех одинаковый

-~{}~ 22.01.06 14:43:

никак не получается создать новое время командой mktime.
беру минуту,секунду,час 0, получается 2012 год вообще =(
 

alan4ick

Guest
вообщето unixtime идет по гринвичу, поэтому ни каких перерасчетов делать не надо, и то что я написал , будет корректно.

=====
php manual:
time
Возвращает количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT) до текущего времени.
 

trasherz

Новичок
alan4ick, я про пересчеты и не говорю.
Я уже объяснил трабл. Если юзверь зарегался два года назад в вечером, то через два года утром он не будет считаться зареганным в течение двух лет..
 

alan4ick

Guest
trasherz

значит тебе надо найти timestamp для сегодняшего утра

Опять же используем strtotime без всяких list , explode и mktime
PHP:
if( strtotime("+ 2 year",$reg_timestamp)>=strtotime("today" )){
 echo "Вы уже 2 года с нами";
}
 

trasherz

Новичок
alan4ick, спасибо огроменное =))
Все работает.

P.S. Только ты там скобку забыл одну, перед { ;)
 
Сверху