Колко остават

ExpressYourself

Registered
Как мога да разбера колко дни, месеци, часове остават от датите:
Пример имам 27 Януари 1993 и 29 Май 2010 как мога да разбера между тях колко остават?
 
Ами идеята е да ги направиш в Unix timestamp, да ги извадиш и да видиш колко ти остава. Общо взето кода може да е следния:

$data1 = '2009-12-10';
$data2 = '2010-05-12';

$date1_arr = explode('-', $data1);
$date2_arr = explode('-', $data2);

$date1_unix = mktime(0,0,0,$date1_arr[1],$date1_arr[2],$date1_arr[0]) ;
$date2_unix = mktime(0,0,0,$date2_arr[1],$date2_arr[2],$date2_arr[0]) ;

Така в случая имаш двете дати в числа ($date1_unix и $date2_unix), които можеш да сравняваш, вадиш събираш и т.н.

Примерно можеш да направиш следното:

$newDate = $date2_unix - $date1_unix;

Получава се някакво число примерно 1242234562;
За да го форматираш както искаш ползваш функцията date()

echo date('d, G:h:i', $newDate);

Надявам се да си ме разбрал, ако не - пиши и ще дообяснявам :)
 
d3xter каза:
Ами идеята е да ги направиш в Unix timestamp, да ги извадиш и да видиш колко ти остава. Общо взето кода може да е следния:

$data1 = '2009-12-10';
$data2 = '2010-05-12';

$date1_arr = explode('-', $data1);
$date2_arr = explode('-', $data2);

$date1_unix = mktime(0,0,0,$date1_arr[1],$date1_arr[2],$date1_arr[0]) ;
$date2_unix = mktime(0,0,0,$date2_arr[1],$date2_arr[2],$date2_arr[0]) ;

Така в случая имаш двете дати в числа ($date1_unix и $date2_unix), които можеш да сравняваш, вадиш събираш и т.н.

Примерно можеш да направиш следното:

$newDate = $date2_unix - $date1_unix;

Получава се някакво число примерно 1242234562;
За да го форматираш както искаш ползваш функцията date()

echo date('d, G:h:i', $newDate);

Надявам се да си ме разбрал, ако не - пиши и ще дообяснявам :)

Ми не ми се получава нещо..
Ако правилно си ме разбрал днес сме 25/05/2010 и искам да разбера колко остават до 25/05/2011
 
Код:
<?php
$a = time();
$b = mktime(0, 0, 0, 5, 29, 2011);

$sec = $b - $a;
if($days = intval($sec / 86400))
	$sec = $sec % 86400;

if($hours = intval($sec / 3600))
	$sec = $sec % 3600;

if($min = intval($sec / 60))
	$sec = $sec % 60;

printf('%s days %s hours %s minutes %s seconds', $days, $hours, $min, $sec);
?>
 
Заповядай напълно работещ код:

<?php
//Ако правилно си ме разбрал днес сме 25/05/2010 и искам да разбера колко остават до 25/05/2011

$compareDate = '25/05/2011'; //Дата ,с която искаш да сравниш сегашния момент
$now = time(); //коментара е излишен :)

$date_arr = explode('/', $compareDate); //Тук създадохме масив, като разделихме стринга чрез /
$compDateToUnix = mktime(0, 0, 0, $date_arr[1], $date_arr[0], $date_arr[2]); //Тук превръщаме датата с която искаме да сравним сегашния момент в UNIX Timestamp

$differnce = $compDateToUnix - $now; //Разлика в секунди между двете дати

if( $differnce > 0 ){ //Тук сравняваме дали момента не е минал

$days = floor( $differnce / 86400 ); //86400 са секундите в 1 ден т.е. тук виждаме колко дни остават
$hours = floor( ($differnce%86400)/ 3600 ); //Тук смятаме часовете
$minutes = floor( (($differnce%86400)%3600) / 60 ); //Тук смятаме минутите
$secunds = (($differnce%86400)%3600)%60; //И каквото остане е за секундите


echo 'Остават: '.$days.'дни '.$hours.'часа '.$minutes.'минути '.$secunds.'секунди';

}else{
echo 'Датата е отминала!';
}
 
MakeAWish каза:
Код:
<?php
$a = time();
$b = mktime(0, 0, 0, 5, 29, 2011);

$sec = $b - $a;
if($days = intval($sec / 86400))
	$sec = $sec % 86400;

if($hours = intval($sec / 3600))
	$sec = $sec % 3600;

if($min = intval($sec / 60))
	$sec = $sec % 60;

printf('%s days %s hours %s minutes %s seconds', $days, $hours, $min, $sec);
?>

Този начин е перфектен само да попитам може ли да се добави и месеци ?
 
ExpressYourself каза:
Този начин е перфектен само да попитам може ли да се добави и месеци ?
По-сложно става, защото месеците съдържат различен брой дни :)

Ето ти го с функция, по-удобно е според мен

Код:
<?php 
function convertTime($date1, $date2)
{
	$date1 = (is_numeric($date1)) ? $date1 : strtotime($date1);
	$date2 = (is_numeric($date2)) ? $date2 : strtotime($date2);
	
	$seconds = $date2 - $date1;
	
	if($years = intval(floor($seconds / 31536000)))
		$seconds = $seconds % 31536000;
	
	if($days = intval(floor($seconds / 86400)))
		$seconds = $seconds % 86400;
	
	if($hours = intval(floor($seconds / 3600)))
		$seconds = $seconds % 3600;
	
	if($minutes = intval(floor($seconds / 60)))
		$seconds = $seconds % 60;
	
	$return = NULL;
	$return .= ($years > 0) ? sprintf(' %s години', $years) : NULL;
	$return .= ($days > 0) ? sprintf(' %s дни', $days) : NULL;
	$return .= ($hours > 0) ? sprintf(' %s часа', $hours) : NULL;
	$return .= ($minutes > 0) ? sprintf(' %s минути', $minutes) : NULL;
	$return .= ($seconds > 0) ? sprintf(' %s секунди', $seconds) : NULL;
	
	return $return;
}

//$a = time();
$a = '27.01.1993';
$b = '29.05.2010';

echo convertTime($a, $b);
?>
 
MakeAWish каза:
ExpressYourself каза:
Този начин е перфектен само да попитам може ли да се добави и месеци ?
По-сложно става, защото месеците съдържат различен брой дни :)

Ето ти го с функция, по-удобно е според мен

Код:
<?php 
function convertTime($date1, $date2)
{
	$date1 = (is_numeric($date1)) ? $date1 : strtotime($date1);
	$date2 = (is_numeric($date2)) ? $date2 : strtotime($date2);
	
	$seconds = $date2 - $date1;
	
	if($years = intval(floor($seconds / 31536000)))
		$seconds = $seconds % 31536000;
	
	if($days = intval(floor($seconds / 86400)))
		$seconds = $seconds % 86400;
	
	if($hours = intval(floor($seconds / 3600)))
		$seconds = $seconds % 3600;
	
	if($minutes = intval(floor($seconds / 60)))
		$seconds = $seconds % 60;
	
	$return = NULL;
	$return .= ($years > 0) ? sprintf(' %s години', $years) : NULL;
	$return .= ($days > 0) ? sprintf(' %s дни', $days) : NULL;
	$return .= ($hours > 0) ? sprintf(' %s часа', $hours) : NULL;
	$return .= ($minutes > 0) ? sprintf(' %s минути', $minutes) : NULL;
	$return .= ($seconds > 0) ? sprintf(' %s секунди', $seconds) : NULL;
	
	return $return;
}

//$a = time();
$a = '27.01.1993';
$b = '29.05.2010';

echo convertTime($a, $b);
?>

Така показва години :)
 

Back
Горе