И пока мне непонятно: будет показано 2-0-0 или 2-0-1 (лет-месяцев-дней).
Спустя 3 минуты, 59 секунд (5.02.2010 - 16:33) Gabriel написал(а):
sergeiss
ну вот давай подождем до завтра и узнаем
ну вот давай подождем до завтра и узнаем
Спустя 11 секунд (5.02.2010 - 16:34) DedMorozzz написал(а):
201 (;
Прошло 2 года...а вопросы всё теже. Только уже отвечать ты, а не задаёшь Аля смена поколений
Прошло 2 года...а вопросы всё теже. Только уже отвечать ты, а не задаёшь Аля смена поколений
Спустя 32 минуты, 9 секунд (5.02.2010 - 17:06) waldicom написал(а):
Ставим ставки! Думаю, будет написано 2 года, 1 день
Спустя 9 минут, 3 секунды (5.02.2010 - 17:15) stepan написал(а):
sergeiss мои поздравления, можно так сказать это твой день рождения на этом форуме.
Спустя 1 час, 9 минут, 19 секунд (5.02.2010 - 18:24) FatCat написал(а):
Дата регистрации в формате юниксштамп (10 цифр) берется из БД в переменную $member['joined'], вот дальнейший код:
Писал давно, поэтому прошу не смеяться над наивными приемами программирования.
Свернутый текст
// +FatCat Заменяю дату регистрации стажем на форуме
$summ_trezz = time() - $member['joined'];
$summary_days = ceil($summ_trezz/86400)-1; //дни
$summary_yaers = ceil($summary_days/365)-1; //годы
$years = "лет";
if ($summary_yaers%10 == "1" and $summary_yaers!="11") $years = "год";
if ($summary_yaers%10 == "2" and $summary_yaers!="12") $years = "года";
if ($summary_yaers%10 == "3" and $summary_yaers!="13") $years = "года";
if ($summary_yaers%10 == "4" and $summary_yaers!="14") $years = "года";
$summ_count_str .= $summary_yaers." ".$years.", ";
$summary_days2 = $summary_days - ($summary_yaers*365); // дней меньше года
$summary_months = "11 месяцев, ";
$summary_days3 = $summary_days2 - 334;
if($summary_days2 < 335){$summary_months = "10 месяцев, "; $summary_days3 = $summary_days2 - 304;}
if($summary_days2 < 305){$summary_months = "9 месяцев, "; $summary_days3 = $summary_days2 - 273;}
if($summary_days2 < 274){$summary_months = "8 месяцев, "; $summary_days3 = $summary_days2 - 243;}
if($summary_days2 < 244){$summary_months = "7 месяцев, "; $summary_days3 = $summary_days2 - 212;}
if($summary_days2 < 213){$summary_months = "6 месяцев, "; $summary_days3 = $summary_days2 - 181;}
if($summary_days2 < 182){$summary_months = "5 месяцев, "; $summary_days3 = $summary_days2 - 151;}
if($summary_days2 < 152){$summary_months = "4 месяца, "; $summary_days3 = $summary_days2 - 120;}
if($summary_days2 < 121){$summary_months = "3 месяца, "; $summary_days3 = $summary_days2 - 90;}
if($summary_days2 < 91){$summary_months = "2 месяца, "; $summary_days3 = $summary_days2 - 59;}
if($summary_days2 < 60){$summary_months = "1 месяц, "; $summary_days3 = $summary_days2 - 31;}
if($summary_days2 < 32){$summary_months = ""; $summary_days3 = $summary_days2;}
$summ_count_str .= "<nobr>".$summary_months."</nobr>";
$days = "дней";
if ($summary_days3 == "1" or $summary_days3 == "21" or $summary_days3 == "31") $days = "день";
if ($summary_days3 == "2" or $summary_days3 == "3" or $summary_days3 == "4"
or $summary_days3 == "22" or $summary_days3 == "23" or $summary_days3 == "24") $days = "дня";
$summ_count_str .= "<nobr>".$summary_days3." ".$days."</nobr>";
$summ_count_str = str_replace("0 лет, ","",$summ_count_str);
$summ_count_str = str_replace(", 0 дней","",$summ_count_str);
if($summary_days == 0)$summ_count_str = "первый день";
$member['member_joined'] = "На форуме: ".$summ_count_str;
// - FatCat
Писал давно, поэтому прошу не смеяться над наивными приемами программирования.
Спустя 2 минуты, 31 секунда (5.02.2010 - 18:27) DedMorozzz написал(а):
Чёрт, а веть была такая интрига...
Спустя 15 часов, 48 минут (6.02.2010 - 10:15) sergeiss написал(а):
Странно... Вчера было 1-11-31, сегодня 1-11-31...
Спустя 1 час, 25 минут, 58 секунд (6.02.2010 - 11:41) DedMorozzz написал(а):
2,1 Ну феткет всю интригу под корень...как и следовало ожидать 2 года, 1 день (:
Ну что Сергейсс, с юбилеем тебя!
Ну что Сергейсс, с юбилеем тебя!
Спустя 28 минут, 52 секунды (6.02.2010 - 12:09) Joker написал(а):
Цитата (DedMorozzz @ 6.02.2010 - 13:41) |
Ну что Сергейсс, с юбилеем тебя! |
юбелей был день назад))))) когда было 200
Поздравляю!
Спустя 20 минут, 46 секунд (6.02.2010 - 12:30) DedMorozzz написал(а):
не было 200. было 1-12-31
Спустя 9 часов, 31 минута, 9 секунд (6.02.2010 - 22:01) sergeiss написал(а):
DedMorozzz - 1-12-31? Не видел такого. Сначала было с утра 1-11-31, а потом сразу 2-1 (без месяцев).
Но в любом случае 3-й год пошел
Но в любом случае 3-й год пошел
Спустя 8 минут, 58 секунд (6.02.2010 - 22:10) FatCat написал(а):
Цитата (DedMorozzz @ 6.02.2010 - 13:30) |
не было 200. |
С этим февралем вечные заморочки.
С обычными датами проще, есть функции, а вот число дней перевести в годы и месяцы - не знаю функции. Самописная дурит на феврале...
Цитата (sergeiss @ 6.02.2010 - 11:15) |
Вчера было 1-11-31, сегодня 1-11-31... |
Смена даты не в полночь, а в час когда зарегистрировался.
Скрипт же работает с числом секунд от секунды регистрации до текущей.
Зато никакой привязки к часовым поясам.
Спустя 14 минут, 17 секунд (6.02.2010 - 22:25) sergeiss написал(а):
Цитата (FatCat @ 6.02.2010 - 23:10) |
Скрипт же работает с числом секунд от секунды регистрации до текущей. |
"Так вот оно чё, Михалыч!"
Цитата (FatCat @ 6.02.2010 - 23:10) |
а вот число дней перевести в годы и месяцы - не знаю функции. |
Объекты DateTime и DateInterval. Не далее как вчера решал такую же задачу Надо удалить файлы в каталоге, которые старше указанного количества дней. При этом дата создания заложена в имени файла. Типа такого: Log_2009_10_23.txt
И следующий код очень удачно находит (и удаляет) искомые файлы, не трогая все, имена которых не соответствуют шаблону.
И нету привязки к конкретным месяцам.
$currdate=new DateTime();
$filedate=new DateTime();
$currdate->setDate( date('Y'), date('m'), date('d'));
$dir=dir( 'c:/rms_stat/log' );
$path=$dir->path;
$files_deleted=0;
while( $file=$dir->read() )
{
list( $f_name, $f_ext)=explode( '.', $file );
if( trim( $f_ext ) != 'txt' ) continue;
list( $name, $year, $month, $day )=explode( '_', $f_name );
if( intval( $year ) == 0 or intval( $month ) == 0 or intval( $day ) == 0 ) continue;
$filedate->setDate( $year, $month, $day);
list( $y, $m, $d)=explode( ' ', $filedate->diff( $currdate )->format( '%y %m %d' ) );
// разницу я нахожу в днях, потому что мне так удобнее в данном случае
$diff=$y*12*30+$m*30+$d;
if( $diff > 10 ) // удалить log-файл
{
$for_unlink=$path.'/'.$file;
unlink( $for_unlink );
$files_deleted++;
}
}
Спустя 22 минуты, 59 секунд (6.02.2010 - 22:48) FatCat написал(а):
sergeiss
366 дней это ровно год или год и день?
Если попало в промежуток 29 февраля високосного года - тогда ровно год; не попало - год и день.
366 дней это ровно год или год и день?
Если попало в промежуток 29 февраля високосного года - тогда ровно год; не попало - год и день.
Спустя 13 часов, 28 минут, 13 секунд (7.02.2010 - 12:16) FatCat написал(а):
Выспался, сообразил.
У нас же всегда есть два юниксштампа, две цифры; например момент регистрации и текущий момент.
Дальше по date('Y') получаем 2 цифры года и считаем; то же для месяцев, дней, часов и минут.
У нас же всегда есть два юниксштампа, две цифры; например момент регистрации и текущий момент.
Дальше по date('Y') получаем 2 цифры года и считаем; то же для месяцев, дней, часов и минут.
Спустя 4 часа, 6 минут, 15 секунд (7.02.2010 - 16:22) FatCat написал(а):
Сделал, установил.
Не очень простой код получился...
А для вывода под аватарки:
В результате первые сутки будет считать часы и минуты, затем с точностью до дня; переход дня по моменту времени регистрации.
Не очень простой код получился...
/*-------------------------------------------------------------------------*/
// Интервал времени между событиями
/*-------------------------------------------------------------------------*/
function date_diff($begin, $end=0){
if(!$end)$end = time();
if( intval($end)<=intval($begin) )return array();
$s_diff = intval(date("s",$end)) - intval(date("s",$begin));
if($s_diff<0)
{
$s_diff += 60;
$end -= 60;
}
$i_diff = intval(date("i",$end)) - intval(date("i",$begin));
if($i_diff<0)
{
$i_diff += 60;
$end -= 3600;
}
$g_diff = intval(date("G",$end)) - intval(date("G",$begin));
if($g_diff<0)
{
$g_diff += 24;
$end -= 86400;
}
$y_diff = intval(date("Y",$end)) - intval(date("Y",$begin));
$m_diff = intval(date("m",$end)) - intval(date("m",$begin));
$dpm = 30;
if( stristr(",1,3,5,7,8,10,12,",",".date("Y",$end).",") )$dpm = 31;
if(date("m",$end) == "2")
{
if( intval(date("Y",$end))%4 )$dpm = 28;
else $dpm = 29;
}
$d_diff = intval(date("d",$end)) - intval(date("d",$begin));
if($d_diff<0)
{
$d_diff += $dpm;
$m_diff--;
}
if($m_diff<0)
{
$m_diff += 12;
$y_diff--;
}
$diff = array();
$str = " лет";
if($y_diff%10 == 1 and $y_diff!=11)$str = " год";
if( $y_diff%10>1 and $y_diff%10<5 and ( $y_diff<10 or $y_diff>20 ) )$str = " года";
if($y_diff)$diff['y'] = $y_diff.$str;
$str = " месяцев";
if($m_diff == 1)$str = " месяц";
if($m_diff>1 and $m_diff<5)$str = " месяца";
if($m_diff)$diff['m'] = $m_diff.$str;
$str = " дней";
if($d_diff%10 == "1" and $d_diff!=11)$str = " день";
if( $d_diff%10>1 and $d_diff%10<5 and ( $d_diff<10 or $d_diff>20 ) )$str = " дня";
if($d_diff)$diff['d'] = $d_diff.$str;
$str = " часов";
if($g_diff%10 == "1" and $g_diff!=11)$str = " час";
if( $g_diff%10>1 and $g_diff%10<5 and ( $g_diff<10 or $g_diff>20 ) )$str = " часа";
if($g_diff)$diff['g'] = $g_diff.$str;
$str = " минут";
if($i_diff%10 == "1" and $i_diff!=11)$str = " минута";
if( $i_diff%10>1 and $i_diff%10<5 and ( $i_diff<10 or $i_diff>20 ) )$str = " минуты";
if($i_diff)$diff['i'] = $i_diff.$str;
$str = " секунд";
if($s_diff%10 == "1" and $s_diff!=11)$str = " секунда";
if( $s_diff%10>1 and $s_diff%10<5 and ( $s_diff<10 or $s_diff>20 ) )$str = " секунды";
if($s_diff)$diff['s'] = $s_diff.$str;
return $diff;
}
А для вывода под аватарки:
$diff = $std->date_diff($member['joined']);
if(!$diff['y'] and !$diff['m'] and !$diff['d'])unset($diff['s']);
else unset($diff['g'],$diff['i'],$diff['s']);
$diff = "<nobr>".implode(",</nobr> <nobr>",$diff)."</nobr>";
$member['member_joined'] = "На форуме: ".$diff;
В результате первые сутки будет считать часы и минуты, затем с точностью до дня; переход дня по моменту времени регистрации.
Спустя 5 часов, 37 минут, 30 секунд (7.02.2010 - 21:59) sergeiss написал(а):
$s_diff = intval(date("s",$end)) - intval(date("s",$begin));
if($s_diff<0)
{
$s_diff += 60;
$end -= 60;
}
$i_diff = intval(date("i",$end)) - intval(date("i",$begin));
if($i_diff<0)
{
$i_diff += 60;
$end -= 3600;
}
$g_diff = intval(date("G",$end)) - intval(date("G",$begin));
if($g_diff<0)
{
$g_diff += 24;
$end -= 86400;
}
$y_diff = intval(date("Y",$end)) - intval(date("Y",$begin));
$m_diff = intval(date("m",$end)) - intval(date("m",$begin));
$dpm = 30;
if( stristr(",1,3,5,7,8,10,12,",",".date("Y",$end).",") )$dpm = 31;
if(date("m",$end) == "2")
{
if( intval(date("Y",$end))%4 )$dpm = 28;
else $dpm = 29;
}
$d_diff = intval(date("d",$end)) - intval(date("d",$begin));
if($d_diff<0)
{
$d_diff += $dpm;
$m_diff--;
}
if($m_diff<0)
{
$m_diff += 12;
$y_diff--;
}
Всю процитированную выше часть кода можно заменить на нечто более простое (основа - мой код на предыдущей странице темы):
$olddate=new DateTime();
$currdate=new DateTime();
$olddate->setDate( date('Y', $begin), date('m', $begin), date('d', $begin));
$currdate->setDate( date('Y', $end), date('m', $end), date('d', $end));
list( $y, $m, $d)=explode( ' ', $olddate->diff( $currdate )->format( '%y %m %d' ) );
// вуаля - в переменных $y, $m, $d записана разница между датами с учетом високосности годов.
Проверь - должно работать исправно.
_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL
* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.
* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)