<?
#------------- Функции работы с датами -------------------------------------
#if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)) {
#    echo "$regs[3].$regs[2].$regs[1]";
#} else {
#    echo "Invalid date format: $date";
#}
# 
function normaldate($date) { #преобразование любого вида дмг в серверный формат ISO
$date=trim($date);
	for ($i=0;$i<strlen($date);$i++){
		$s=$date[$i];
		if (preg_match("![0-9]!i",$s)) {
			if ($u==0) {$d.=$s;}
			if ($u==1) {$m.=$s;}
			if ($u==2) {$y.=$s;}
			$last=false;
		}else{ if (!$last) {$u++;} $last=true;}
	}
	if (checkdate($m,$d,$y)) {
		$mktime=mktime(0, 0, 0, $m, $d, $y);
		if ($mktime==-1){
			return (strlen($d)==1?'0'.$d:$d).'.'.(strlen($m)==1?'0'.$m:$m).'.'.(($y>70&&$y<100)?'19'.$y:str_pad($y, 4,"2000", STR_PAD_LEFT));
		}else{return date("d-m-Y 00:00", mktime(0, 0, 0, $m, $d, $y));}
	}
}
function viewdate($date) { # Преобразование любого мдг + ISO гмд в дд.мм.гггг
	$date=str_replace('%20',' ',$date);
 $s=normaldate($date);
 if ($s) { # конверт из сервера ОК 
	 return date("d.m.Y", mktime(0, 0, 0, substr($s,3,2), substr($s,0,2), substr($s,6,4))); #конверт база-юзеру
 } else { #выдал пусто - либо пользователь ошибся либо серверная 
	 #проверить если серверная        месяц                день              год
	 if (substr($date,5,2)>12 OR substr($date,5,2)<1 OR substr($date,8,2)>31 OR substr($date,8,2)<1 OR substr($date,0,4)<1000 OR substr($date,0,4)>2200) {return $date;}
	 $mktime=mktime(0, 0, 0, substr($date,5,2), substr($date,8,2), substr($date,0,4));
	 if ($mktime==-1) {
	 	if (substr($date,5,2)>0 && substr($date,8,2)>0) {
		if (checkdate(substr($date,5,2), substr($date,8,2), substr($date,0,4))) {
			$s=substr($date,8,2).'.'.substr($date,5,2).'.'.substr($date,0,4);
		}else{$s=$date;}
		}else{$s=$date;}
	 }else{
		 $s=date("d.m.Y", $mktime); #конверт iso-user
	 }
	 if (normaldate($s)) { #дата проверена ОК 
		if ($s!='01.01.1970') {return $s;} else {return $date;}
	 }else { #непонятный формат даты
		return $date;
	 }
 }
}
function days($dateTimeBegin,$dateTimeEnd) { # Подсчет разницы в днях
	if (!normaldate($dateTimeEnd) OR !normaldate($dateTimeBegin)) {return "?";} else {
	return(floor((strtotime(normaldate($dateTimeEnd)) - strtotime(normaldate($dateTimeBegin)))/86400)); //86400s=1d
	}
}
function days_text($days) { # склонение слова "дней"
	$s=substr($days,strlen($days)-1,1);
	if (strlen($days)>=2) {
		if (substr($days,strlen($days)-2,1)=='1') {return $days." дней";$ok=true;} 
	}if (!$ok) {
	if ($s==0 OR $s>=5) {return $days." дней";}
	elseif ($s==1) {return $days." день";}
	elseif ($s>=2 && $s<=4) {return $days." дня";}
	}
}
#-------отладочная функция-------
function showdata($d) {
	echo "<table><tr>";
	foreach ($d as $key=>$value) {
		echo "<td>";
			foreach ($value as $key1=>$value1) {
				echo "[".$key1."]=>".$value1."<br>";
			}
		echo "</td>";
	}
	echo "</tr></table>";
}

?>