преди х време

C++ JAVA
Post Reply
nfarkt

преди х време

Post by nfarkt » Thu Dec 22, 2011 7:08 pm

Привет, приятели. Търсих из уроците, но напразно, затова се обръщам тук. Случайно някой да може да ми даде примерен скрипт за функцията "преди х време." (като във фейсбук публикациите). Благодаря предварително.

M1tq96
Турист
Турист
Posts: 373
Joined: Fri Nov 11, 2011 7:04 am
Answers: 39

Post by M1tq96 » Thu Dec 22, 2011 7:29 pm

ето еднин мой скрипт .. :)

[php]
function maketime($datefrom,$dateto=-1)
{
// Defaults and assume if 0 is passed in that
// its an error rather than the epoch

if($datefrom<=0) { return "Преди мноого време"; }
if($dateto==-1) { $dateto = time(); }

// Calculate the difference in seconds betweeen
// the two timestamps

$difference = $dateto - $datefrom;

// If difference is less than 60 seconds,
// seconds is a good interval of choice

if($difference < 60)
{
$interval = "s";
}

// If difference is between 60 seconds and
// 60 minutes, minutes is a good interval
elseif($difference >= 60 && $difference<60*60)
{
$interval = "n";
}

// If difference is between 1 hour and 24 hours
// hours is a good interval
elseif($difference >= 60*60 && $difference<60*60*24)
{
$interval = "h";
}

// If difference is between 1 day and 7 days
// days is a good interval
elseif($difference >= 60*60*24 && $difference<60*60*24*7)
{
$interval = "d";
}

// If difference is between 1 week and 30 days
// weeks is a good interval
elseif($difference >= 60*60*24*7 && $difference <
60*60*24*30)
{
$interval = "ww";
}

// If difference is between 30 days and 365 days
// months is a good interval, again, the same thing
// applies, if the 29th February happens to exist
// between your 2 dates, the function will return
// the 'incorrect' value for a day
elseif($difference >= 60*60*24*30 && $difference <
60*60*24*365)
{
$interval = "m";
}

// If difference is greater than or equal to 365
// days, return year. This will be incorrect if
// for example, you call the function on the 28th April
// 2008 passing in 29th April 2007. It will return
// 1 year ago when in actual fact (yawn!) not quite
// a year has gone by
elseif($difference >= 60*60*24*365)
{
$interval = "y";
}

// Based on the interval, determine the
// number of units between the two dates
// From this point on, you would be hard
// pushed telling the difference between
// this function and DateDiff. If the $datediff
// returned is 1, be sure to return the singular
// of the unit, e.g. 'day' rather 'days'

switch($interval)
{
case "m":
$months_difference = floor($difference / 60 / 60 / 24 /
29);
while (mktime(date("H", $datefrom), date("i", $datefrom),
date("s", $datefrom), date("n", $datefrom)+($months_difference),
date("j", $dateto), date("Y", $datefrom)) < $dateto)
{
$months_difference++;
}
$datediff = $months_difference;

// We need this in here because it is possible
// to have an 'm' interval and a months
// difference of 12 because we are using 29 days
// in a month

if($datediff==12)
{
$datediff--;
}

$res = ($datediff==1) ? "преди $datediff месец" : "преди $datediff
месеца";
break;

case "y":
$datediff = floor($difference / 60 / 60 / 24 / 365);
$res = ($datediff==1) ? " преди $datediff год." : "преди $datediff год.";
break;

case "d":
$datediff = floor($difference / 60 / 60 / 24);
$res = ($datediff==1) ? "преди $datediff ден " : "преди $datediff
дни";
break;

case "ww":
$datediff = floor($difference / 60 / 60 / 24 / 7);
$res = ($datediff==1) ? "преди $datediff седмица" : "преди $datediff
седмици";
break;

case "h":
$datediff = floor($difference / 60 / 60);
$res = ($datediff==1) ? "преди $datediff час " : " преди $datediff часа";
break;

case "n":
$datediff = floor($difference / 60);
$res = ($datediff==1) ? "преди $datediff мин. " :
"преди $datediff мин.";
break;

case "s":
$datediff = $difference;
$res = ($datediff==1) ? "преди $datediff сек." :
"преди $datediff сек.";
break;
}
return $res;
}

[/php]

написах коментарите на ЕН щото преди на БГ ми излизаше " ?? "

иначи работи по следния начин .. :
<?php
$time = time() - 86400 / 6.5;
echo maketime($time);
?>
:?: :?: :?: :?:

nfarkt

Post by nfarkt » Thu Dec 22, 2011 8:43 pm

Обоснови се малко бе, приятел. Добавих скрипта ти, след което, като публикувам, и ми изписва винаги "преди 3 часа".

User avatar
Genius_m
Турист
Турист
Posts: 502
Joined: Sat Mar 06, 2010 2:08 pm
Location: localhost

Post by Genius_m » Thu Dec 22, 2011 10:41 pm

[php]// Функция за изминало време от дадено събитие
function TimeAgo($datefrom,$dateto=-1)
{

// Началната дата е 01.01.1970
if($datefrom <= 0) { return "Преди много време"; }
if($dateto == -1) { $dateto = time(); }

// Разлика в секунди между датите
$difference = $dateto - $datefrom;

// Ако разликата е под минута, показваме секундите
if($difference < 60)
{
$interval = "s";
}

// Ако интервала е между 1 и 60 минути показваме минутите
elseif($difference >= 60 && $difference < 60*60)
{
$interval = "n";
}

// Ако интервала е между 1 и 24 часа, показваме часовете
elseif($difference >= 60*60 && $difference < 60*60*24)
{
$interval = "h";
}

// Ако е в рамките на седмицата, показваме дните
elseif($difference >= 60*60*24 && $difference < 60*60*24*7)
{
$interval = "d";
}

// Ако е между 1 и 30 дена, показваме седмиците
elseif($difference >= 60*60*24*7 && $difference < 60*60*24*30)
{
$interval = "ww";
}

// Ако интервала е между 30 дена и 1 година показваме месеците
elseif($difference >= 60*60*24*30 && $difference < 60*60*24*365)
{
$interval = "m";
}

// Ако интервала е над 365 дена показваме годините
elseif($difference >= 60*60*24*365)
{
$interval = "y";
}

/*
* На база на интервала определяме броя единици
* между датите.Също така определяме думичките
* за ед./мн. число (ако е 1 или са повече)
*/

switch($interval)
{
case "m":
$months_difference = floor($difference / 60 / 60 / 24 /
29);

$datediff = $months_difference;

// We need this in here because it is possible
// to have an 'm' interval and a months
// difference of 12 because we are using 29 days
// in a month

if($datediff==12)
{
$datediff--;
}

$res = ($datediff==1) ? "Преди 1 месец" : "Преди $datediff месеца";
break;

case "y":
$datediff = floor($difference / 60 / 60 / 24 / 365);
$res = ($datediff==1) ? "Преди 1 година" : "Преди $datediff години";
break;

case "d":
$datediff = floor($difference / 60 / 60 / 24);
$res = ($datediff==1) ? "Преди 1 ден" : "Преди $datediff дена";
break;

case "ww":
$datediff = floor($difference / 60 / 60 / 24 / 7);
$res = ($datediff==1) ? "Преди 1 седмица" : "Преди $datediff седмици";
break;

case "h":
$datediff = floor($difference / 60 / 60);
$res = ($datediff==1) ? "Преди 1 час" : "Преди $datediff часа";
break;

case "n":
$datediff = floor($difference / 60);
$res = ($datediff==1) ? "Преди 1 минута" : "Преди $datediff минути";
break;

case "s":
$datediff = $difference;
$res = ($datediff==1) ? "Преди 1 секунда" : "Преди $datediff секунди";
break;
}
return $res;
}[/php]

[php]
<?php $predi = TimeAgo($date,$dateto=-1) ; print $predi; ?>
[/php]
$date го вземаш от базата данни.
А когато го запазваш го запазвай така:
[php]$date = time();[/php]

relax4o
Потребител
Потребител
Posts: 995
Joined: Mon Mar 21, 2011 7:40 pm
Answers: 75

Post by relax4o » Fri Dec 23, 2011 10:41 am

Не разбрах защо го има втория параметър. Така или иначе на него му трябва от дата. Защо не сложиш променливата вътре във функцията.
А, ако толкова държиш да е като параметър, защо аджеба вместо -1 не подаваш директно time() ?


[php]
function maketime($datefrom, $dateto = time()){

}
[/php]

relax4o
Потребител
Потребител
Posts: 995
Joined: Mon Mar 21, 2011 7:40 pm
Answers: 75

Post by relax4o » Fri Dec 23, 2011 2:19 pm

Без да съм писал кода мога да ти кажа, че втория параметър си го сложил, за да изчисляваш ОТ дата ДО дата.
Изглежда кода май не си ги писал ти, а?
Уж има коментари, а пак не можеш да разбереш за какво си го сложил този параметър.

Зададох ти този въпрос, защото пускате кодове без да мислите дали ще върши реално някаква работа на автора. После не ми цитирайте думите "мислете преди да ползвате".

User avatar
hrischo
Потребител
Потребител
Posts: 1037
Joined: Wed Apr 12, 2006 4:13 pm
Answers: 233
Location: София
Contact:

Post by hrischo » Fri Dec 23, 2011 2:44 pm

http://www.sajithmr.me/php-time-ago-calculation

Някой е "копирал" кода ти преди почти 4 години :D :D

Post Reply