Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сколько времени осталось
 
 автор: winflip   (13.03.2008 в 17:17)   письмо автору
 
 

В общем есть в базе данных время в формате DATETIME. И надо посчитать сколько месяцев, дней, часов, минут, секунд осталось до этого времени. Чтобы примерно было так. Осталось: 2 дня 4 минуты 25 секунд

   
 
 автор: winflip   (13.03.2008 в 19:18)   письмо автору
 
   для: winflip   (13.03.2008 в 17:17)
 

актуально

   
 
 автор: Fighter   (14.03.2008 в 19:03)   письмо автору
 
   для: winflip   (13.03.2008 в 19:18)
 

Цетирую Trianon :

"Берите из php линейную абсолютную метку времени планируемого события (mktime()) и передавайте её на клиентскую сторону - в JavaScript.
Все арифметические действия (тики, определение оставшегося интервала и пр.) вычисляйте в линейных единицах (секундах либо миллисекундах). Перед выводом - преобразуйте линейное время в человеческое представление ЧЧ:ММ:СС и т.д.
"

Но это не лучший вариант :)) по моему мнению для вашего случая.

   
 
 автор: mihdan   (14.03.2008 в 19:07)   письмо автору
 
   для: Fighter   (14.03.2008 в 19:03)
 

В самый раз!

   
 
 автор: grimweb   (15.03.2008 в 13:24)   письмо автору
 
   для: winflip   (13.03.2008 в 17:17)
 

Ну вот только с секундами... Потом делением и остатками можно остальное вывести...

<html><head><title>Функция "СКОЛЬКО ДНЕЙ ОСТАЛОСЬ ДО НОВОГО ГОДА?"</title><meta http-equiv="REFRESH" content="1"></head><body>
<?php
/*В параметре функции NewYear $d - "Год Нового года:))"*/
function NewYear($d){
    
$a mktime(0,0,0,1,1,$d);
    
$b strtotime("now");
    
$c $a $b;
    return 
$c;
}
$e NewYear(2009);
$f $e 1000;
$g $f 1000;
echo 
"До следующего Нового года осталось: $e секунд! И $f милисекунд!";
?></body></html>

   
 
 автор: winflip   (16.03.2008 в 10:53)   письмо автору
 
   для: grimweb   (15.03.2008 в 13:24)
 

Да в секундах это легко, но всё равно я не понимаю как всё это осуществить в целом

   
 
 автор: Wunderbar   (16.03.2008 в 11:09)
 
   для: winflip   (16.03.2008 в 10:53)
 

Переведи в секунды (unix timestamp) так: SELECT UNIX_TIMESTAMP(`field_datetime`) FROM ..., где field_datetime - твоё поле. А там, вычитай из получившегося значения текущий timestamp (его получают функцией time() ).
Если значение отрицательное, то работы нет.

[поправлено модератором]

   
 
 автор: winflip   (16.03.2008 в 11:52)   письмо автору
 
   для: Wunderbar   (16.03.2008 в 11:09)
 

Да это я понимаю. Меня интересует, что дальше.

   
 
 автор: Wunderbar   (16.03.2008 в 11:57)
 
   для: winflip   (16.03.2008 в 11:52)
 

Я сейчас не понял. Ты дошёл до какого момента? Уже получил "Осталось 5 мин. 6 сек."? Тогда дальше можешь делать то, что желаешь нужным. Выводить это пользователю на экран, например.

   
 
 автор: winflip   (18.03.2008 в 07:16)   письмо автору
 
   для: Wunderbar   (16.03.2008 в 11:57)
 

я дошел до того что получил разницу в секундах с текущего момента до того что в таблице

   
 
 автор: KPETuH   (18.03.2008 в 07:44)   письмо автору
 
   для: winflip   (18.03.2008 в 07:16)
 

ну а вчем тогда проблема не знаете как из секунд получить часы? :)

   
 
 автор: winflip   (19.03.2008 в 21:14)   письмо автору
 
   для: KPETuH   (18.03.2008 в 07:44)
 

В том дело мне нужны не только часы, но и дни секунды, минуты, месяцы. То есть еслт 3672 секунды то 1 час 1 минута 12 сукунд!!!!

   
 
 автор: winflip   (20.03.2008 в 07:11)   письмо автору
 
   для: winflip   (19.03.2008 в 21:14)
 

а не 1 час 61 минута ... секунд

   
 
 автор: Fighter   (20.03.2008 в 14:22)   письмо автору
 
   для: winflip   (20.03.2008 в 07:11)
 

Попробуй, так на вскидку написал, по идее тебе это подойдет


<?
$time
=139320;


$day=floor($time/86400);
$hours=floor(($time/3600)-$day*24);
$min=floor(($time-$hours*3600-$day*86400)/60);
$sec=$time-($min*60+$hours*3600+$day*86400);

echo 
"Дни - $day : Часы - $hours : Минуты - $min : Секунды - $sec";

?>


Может не совсем удачно но черт с ним :) до месяцев и годов думаю сам допишешь :)

   
 
 автор: Wunderbar   (20.03.2008 в 15:02)
 
   для: Fighter   (20.03.2008 в 14:22)
 

> до месяцев и годов думаю сам допишешь
А слабо самому написать? Это и есть самое сложное, ибо количество дней в месяце не константа.

   
 
 автор: Fighter   (20.03.2008 в 15:03)   письмо автору
 
   для: Wunderbar   (20.03.2008 в 15:02)
 

Ну как же.. ОЧ даже константа, на каждый месяц свое количество дней, а не случайное :))))) только февраль меняется и то раз в четыре года :)

   
 
 автор: Wunderbar   (21.03.2008 в 01:33)
 
   для: Fighter   (20.03.2008 в 15:03)
 

> ОЧ даже константа, на каждый месяц свое количество дней, а не случайное

Ах как всё просто. Ну приведи код, пожалуйста.

   
 
 автор: Fighter   (21.03.2008 в 13:24)   письмо автору
 
   для: Wunderbar   (21.03.2008 в 01:33)
 

Вот код, прошу прощения за предыдущее высказывание, не так все просто оказалось, но все таки решаемо :) Как сделать проще пока не додумался, код далеко не идеален, как то можно сделать все проще и быстрее и короче, если додумаю как напишу. Пока тольлко это но работает. 3 часа мозг парил.

<?
$timeSQL
=822269458;
$timeNOW=386954;
$time=$timeSQL-$timeNOW;

$day=floor($time/86400);
$hours=floor(($time/3600)-$day*24);
$min=floor(($time-$hours*3600-$day*86400)/60);
$sec=$time-($min*60+$hours*3600+$day*86400);

$month1=31;
$vesokosnyi=date("L");
if(
$vesokosnyi==1)
{
$month2=29;
}else {
$month2=28;}
$month3=31;
$month4=30;
$month5=31;
$month6=30;
$month7=31;
$month8=31;
$month9=30;
$month10=31;
$month11=30;
$month12=31;

$day_now=date("j");
$month_now=date("n");
$year_now=date("Y");
$a='month';
$a.=$month_now;
$j=$day_now;



for(
$i=$day_now;$i<=$day;$i++)
{
$j++;

$ves=$year_now/4;
$ves=gettype($ves);
if(
$ves==integer)
{
$month2=29;
}else {
$month2=28;}

if(
$j==$$a)
{
$month_all+=1;
$a='month';
$month_now+=1;
if(
$month_now>12){$month_now=1;$year_now+=1;}
$a.=$month_now;
$j=1;
}

}
$day_all=$j;

echo 
"Месяц - $month_all: День - $day_all : Час - $hours : Минута - $min : Секунда - $sec";

?>




Или вот еще вариант, только они показывют разное время :( бошка что то уже не варит..
Расчитываем немного подругому и попроще, помоему этот вариант правильнее и проще.


<?
$timeSQL
=822269458;
$timeNOW=386954;
$time=$timeSQL-$timeNOW;

$date_now=date("Y-n-j-G-i-s");
$date_tooday=date("Y-n-j-G-i-s",time() + $time);

$date_now=explode("-",$date_now);
$date_tooday=explode("-",$date_tooday);

$years=$date_tooday["0"]-$date_now["0"];


if(
$date_now["1"]>$date_tooday["1"])
{
$month=$date_now["1"]-$date_tooday["1"];
}
else {
$month=$date_tooday["1"]-$date_now["1"];}


if(
$date_now["2"]>$date_tooday["2"])
{
$day=$date_now["2"]-$date_tooday["2"];
}
else {
$day=$date_tooday["2"]-$date_now["2"];}


if(
$date_now["3"]>$date_tooday["3"])
{
$hours=$date_now["3"]-$date_tooday["3"];
}
else {
$hours=$date_tooday["3"]-$date_now["3"];}


if(
$date_now["4"]>$date_tooday["4"])
{
$min=$date_now["4"]-$date_tooday["4"];
}
else {
$min=$date_tooday["4"]-$date_now["4"];}


if(
$date_now["5"]>$date_tooday["5"])
{
$sec=$date_now["5"]-$date_tooday["5"];
}
else {
$sec=$date_tooday["5"]-$date_now["5"];}

echo 
"Годы - $years : Месяцы - $month: Дни - $day : Часы - $hours : Минуты- $min : Секунды - $sec ";

?>

   
 
 автор: Fighter   (21.03.2008 в 17:57)   письмо автору
 
   для: Fighter   (21.03.2008 в 13:24)
 

Проверка показала что 1 скрипт работает (вроде как) а 2 неудачный глючит :(
Помоему все таки хрень какая то получилась, помоему не правильно работает.. млин самому интересно как правильно то сделать.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования