PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نمایش تاریخ انتشار نوشته به شکل "10 دقیقه پیش"



naghmesra
June 12th, 2017, 00:07
سلام و درود

تابعی رو نیاز دارم که تاریخ انتشار پست رو به شکل مثلا "n ثانیه پیش" ، "n دقیقه پیش" ، "n ساعت پیش" ، "n روز پیش" ، "n هفته پیش" ، "n ماه پیش" و "n سال پیش" نشون بده.

فقط یه موردی هست وقتی پست وارد دقیقه شد دیگه ثانیه اش رو نشون نده یا پست وارد روز شد دیگه ساعت و دقیقه و ثانیه اش رو نشون نده الی آخر.

تشکر

realAmir
June 12th, 2017, 10:45
میتونید با چند عملیات ریاضی و تابع round در PHP این کار رو انجام بدید.
به این شکل که تاریخ فعلی (این لحظه) رو از تاریخ مورد نظر کم میکنید و با تابع round به مقیاس ثانیه واحد مورد نظر (مثلا دقیقه برابر 60، یا ساعت برابر 3600) رند میکنید و با چند if این ها رو به حروف تبدیل میکنید.
این تابع خلاصه و انجام شده چیزی هستش که گفتم:


<?php
function ago_time($time_ago){
$cur_time = time();
$time_elapsed = $cur_time - $time_ago;
$seconds = $time_elapsed ;
$minutes = round($time_elapsed / 60 );
$hours = round($time_elapsed / 3600);
$days = round($time_elapsed / 86400 );
$weeks = round($time_elapsed / 604800);
$months = round($time_elapsed / 2600640 );
$years = round($time_elapsed / 31207680 );
// Seconds
if($seconds <= 60){
return "$seconds ثانیه قبل";
}
//Minutes
else if($minutes <=60){
if($minutes==1){
return "یک ماه پیش";
}else{
return "$minutes دقیقه قبل";
}
}
//Hours
else if($hours <=24){
if($hours==1){
return "یک ساعت قبل";
}else{
return "$hours ساعت قبل";
}
}
//Days
else if($days <= 7){
if($days==1){
return "دیروز";
}else{
return "$days روز قبل";
}
}
//Weeks
else if($weeks <= 4.3){
if($weeks==1){
return "یک هفته پیش";
}else{
return "$weeks هفته پیش";
}
}
//Months
else if($months <=12){
if($months==1){
return "یک ماه پیش";
}else{
return "$months ماه پیش";
}
}
//Years
else{
if($years==1){
return "یک سال پیش";
}else{
return "$years سال پیش";
}
}
}
?>

و برای استفاده میتونید تابع رو با یک ورودی تاریخ مورد نظر استفاده کنید (متغیر time رو در کد باید تعریف کنید که برابر تاریخ مبدا هستش)

echo ago_time($time);