Оставащо време Година, Месец, Седмица, Дни

nom3r1

Registered
В момента взимам "крайната" дата /оставащото време/ по следния начин:

PHP:
<?php
function timeleft($begin,$end) {
	$dif = $end-$begin;
	$years = intval($dif/(60*60*24*365));
	$dif = $dif-($years*(60*60*24*365));
	$months = intval($dif/(60*60*24*30));
	$dif = $dif-($months*(60*60*24*30));
	$weeks = intval($dif/(60*60*24*7));
	$dif = $dif-($weeks*(60*60*24*7));
	$days = intval($dif/(60*60*24));
	$dif = $dif-($days*(60*60*24));
	$s = "";
	if($years == 1) { $s.= $years."година ";  } elseif($years > 1)  { $s.= $years."години" ; }
	if($months == 1){ $s.= $months."месец ";  } elseif($months > 1) { $s.= $months."месеца"; }
	if($weeks == 1) { $s.= $weeks."седмица "; } elseif($weeks > 1)  { $s.= $weeks."седмици"; }
	if($days == 1)  { $s.= $days."ден "; } else if($days > 1) { $s.= $days."дни";}
	return $s;
}
$now = date("U");
$expire = 123467890; //или колкото е там.
echo timeleft($now, $expire);
?>

Взима ми всичко точно. Обаче намерих един лек "бъг". Ако имам 3 месеца и 3 седмици и 1 ден

То тогава резултата ще бъде:
3месеца3седмици1ден

Слагах   и и във функцията , но не ми харесва, как стой.

Искам когато остават 3 месеца, 3 седмици и 1 ден резултата, които ще върне функцията да бъде:
3 месеца и 1 ден

или

1 месец и 25 дни /например../

когато свърши единия месец:

3 седмици и 5 дни

Предполагам ми схванахте идеята.
 
Може да запишеш елементите от резултата в масив, след което да ги "слепиш" с необходимите запетайки, интервали и т.н. Ето така:

PHP:
function timeleft($begin,$end) {
        $dif = $end-$begin;
        $years = intval($dif/(60*60*24*365));
        $dif = $dif-($years*(60*60*24*365));
        $months = intval($dif/(60*60*24*30));
        $dif = $dif-($months*(60*60*24*30));
        $weeks = intval($dif/(60*60*24*7));
        $dif = $dif-($weeks*(60*60*24*7));
        $days = intval($dif/(60*60*24));
        $dif = $dif-($days*(60*60*24));
        $s = array();
        if($years == 1) { $s[] = $years." година";  } elseif($years > 1)  { $s[] = $years." години" ; }
        if($months == 1){ $s[] = $months." месец";  } elseif($months > 1) { $s[] = $months." месеца"; }
        if($weeks == 1) { $s[] = $weeks." седмица"; } elseif($weeks > 1)  { $s[] = $weeks." седмици"; }
        if($days == 1)  { $s[] = $days." ден"; } else if($days > 1) { $s[] = $days." дни";}
		for($i=0; $i<count($s); $i++) {
			if($i == 0) {
				$result = $s[$i];
			} elseif($i == count($s)-1) {
				$result .= " и " . $s[$i];
			} else {
				$result .= ", " . $s[$i];
			}
		}
        return $result;
}
 

Back
Горе