оставащо време до дадена дата

IzKuFeLiQqQqQ

Registered
здравейте имам едно поле в mysql тип varchar с дата в php е $pole date('d.m.y / H:i') въпроса ми е как да направя така че да излиза колко време остава до датата на това поле

може и статично да е ... важното е да пише примерно полето е 24.11.10 / 22:00 сега да е 22.11.10 / 23:00 и да пише 'остават: 1 ден и 23 часа' или нещо такова ...
 
Сега е 25 да речем искаш до 27 и пишеш

<?php
$now = time();
$to_date = mktime(0, 0, 0, 11, 27, 2010);
$ostavat = $to_date - $now;
print "Oстават ".date("d", $ostavat)." дена и ".date("H")." часа до 27 Ноември.";
?>

Обаче, в to_date стойностите трябва да ги заместиш с тези от базата данни. Препоръчвам ти да използваш UNIX TIMESTAMP, с него и датите се работи къде по-лесно и гъвкаво.
 
я пак прочети какво искам

имам поле в което е тая дата до която ще се брои не ми трябва сам да нагласям до 27 ноември ли ше е пак виж горе ;)
 
А я прочети какво съм писъл ? Просто в mktime заменяш информация в базата, последните 3 аргумента на функцията са ден, месец, година.
 
От база данните вадиш примерно 1291104000 - това е 30.11.2010г.

Код:
function timeleft($seconds)
{
	$now = time();
	if(empty($seconds) OR !preg_match('/^[0-9]+$/', $seconds) OR $seconds < $now)
		return 0;
	
	$seconds -= $now;
	$seconds -= (($days = floor($seconds / (60*60*24)))*60*60*24);
	$seconds -= (($hours = floor($seconds / (60*60)))*60*60);
	$seconds -= (($minutes = floor($seconds / 60))*60);
	return sprintf('%dd %dh %dm %ds', $days, $hours, $minutes, $seconds);
}

Код:
echo timeleft(1291104000);

Резултат

Код:
4d 22h 28m 58s
 
а как да я запиша в този формат и отделно да я вадя като 30.11.2010 а и а аз имам и часа с минутите в това поле


оф знаете ли какво оставете отказах се така да го правя самото поле ще изкарвам пък хората ще си смятат времето :D
 
С функцията time() го правиш :)

Не съм сигурен, че те разбрах, как точно си изградил кода си, но ето ти друг вариант:

Код:
<?php
function timeleft($timestamp)
{
	$now = time();
	if(empty($timestamp))
		return 0;
	
	if(preg_match('/^[0-9]+$/', $timestamp))
		$seconds = $timestamp;
	else
		$seconds = strtotime($timestamp);
	
	if($seconds < $now)
		return 0;
	
	$seconds -= $now;
	$seconds -= (($days = floor($seconds / (60*60*24)))*60*60*24);
	$seconds -= (($hours = floor($seconds / (60*60)))*60*60);
	$seconds -= (($minutes = floor($seconds / 60))*60);
	return sprintf('Дата: %s, Остават: %d дни, %d часа, %d минути, %d секунди.', date('d.m.Y / H:i', $timestamp), $days, $hours, $minutes, $seconds);
}

echo timeleft(1291104000);
echo '<br />';
echo timeleft('30.11.2010');
?>

Резултата е идентичен :)
 
$b_date = date('d.m.y / H:i');
$b_exdate = date('d.m.y / H:i',strtotime("+30 days"));
$query = mysql_query("INSERT INTO `banners` (`b_date`,`b_exdate`) VALUES ('$b_date','$b_exdate')"); така ми е и искам стратично време до b_exdate
 
Код:
<?php
function timeleft($timestamp)
{
	$now = time();
	if(empty($timestamp))
		return 0;
	
	if(preg_match('/^[0-9]+$/', $timestamp))
		$seconds = $timestamp;
	else
		$timestamp = $seconds = strtotime(str_replace('/', ',', $timestamp));

	if($seconds < $now)
		return 0;
	
	$seconds -= $now;
	$seconds -= (($days = floor($seconds / (60*60*24)))*60*60*24);
	$seconds -= (($hours = floor($seconds / (60*60)))*60*60);
	$seconds -= (($minutes = floor($seconds / 60))*60);
	return sprintf('Дата: %s, Остават: %d дни, %d часа, %d минути, %d секунди.', date('d.m.Y / H:i', $timestamp), $days, $hours, $minutes, $seconds);
}

$b_exdate = date('d.m.y / H:i',strtotime("+30 days")); 
echo timeleft($b_exdate);
?>
 
стана само че ми дава error
Fatal error: Cannot redeclare timeleft() (previously declared in /home/a1537615/public_html/system no jq/admin/banners_admin.php:109) in /home/a1537615/public_html/system no jq/admin/banners_admin.php on line 109

Код:
$query = mysql_query("SELECT * FROM `banners` ORDER BY `b_id` DESC LIMIT $start,$pp")or die(mysql_error());
while($row=@mysql_fetch_assoc($query)) {
$b_id = $row['b_id'];
$b_u_id = $row['b_u_id'];
$b_place = $row['b_place'];
$b_link = $row['b_link'];
$b_img = $row['b_img'];
$b_clicks = $row['b_clicks'];
$b_exdate = $row['b_exdate'];
function timeleft($timestamp)//109 ред
{
   $now = time();
   if(empty($timestamp))
      return 0;
   
   if(preg_match('/^[0-9]+$/', $timestamp))
      $seconds = $timestamp;
   else
      $timestamp = $seconds = strtotime(str_replace('/', ',', $timestamp));

   if($seconds < $now)
      return 0;
   
   $seconds -= $now;
   $seconds -= (($days = floor($seconds / (60*60*24)))*60*60*24);
   $seconds -= (($hours = floor($seconds / (60*60)))*60*60);
   $seconds -= (($minutes = floor($seconds / 60))*60);
   return sprintf('Изтича на: %s, Остават: %d дни, %d часа, %d минути, %d секунди.', date('d.m.Y / H:i', $timestamp), $days, $hours, $minutes, $seconds);
}

$name = mysql_query("SELECT * FROM `users` WHERE `id`='$b_u_id' ")or die(mysql_error());
$w = @mysql_fetch_array($name);
echo "Рекламодател <a href='../profile.php?id=".$b_u_id."'>".$w['username']."</a> , <a href='".$b_img."'>Банер</a> , <a href='".$b_link."'>Линк</a> , Място: ".$b_place." , Импресии: ".$b_clicks." , ".timeleft($b_exdate)."  [<a style='color: #00CD00;' href='edit.php?b_id=".$b_id."'>Промени</a>] [<a style='color: #00CD00;' href=\"javascript:confirmDelete('del.php?b_id=".$b_id."')\">Изтрий</a>] <br> \n ";
}
 
Грешката ти я дава, защото някъде из кода си дефинирал същата функция и съответно не можеш да направиш нова със същото име. Намери предната и я изтрии, или преименувай тази и няма да имаш проблем :)
 
не съм сега проверих над тоя код дето ти дадох имам форма с добавяне на още записи ...

едит: сетих се от какво е изкарвам по няколко записа от дб а съм сложиш функцията в mysql array -а махнах го всичко тръгна

+1
 

Back
Горе