سلام
استاد اگر بخواهیم زمان پست هامون را مثل فیسبوک نمایش بدیم باید چکار کنیم ؟
مثال تایم استمپ بدیم و اگر 10 ثانیه گذشته بود چاپ بشه 10 ثانیه پیش
اگر به دقیقه رسید چاپ بشه n دقیقه پیش
اگر به ساعت رسید چاپ بشه n ساعت پیش
روز
هفته
ماه
سال
ممنون میشم راهنمایی کنید
function timeDifference(current, previous) {
var msPerMinute = 60 * 1000;
var msPerHour = msPerMinute * 60;
var msPerDay = msPerHour * 24;
var msPerMonth = msPerDay * 30;
var msPerYear = msPerDay * 365;
var elapsed = current - previous;
if (elapsed < msPerMinute) {
return Math.round(elapsed/1000) + ' seconds ago';
}
else if (elapsed < msPerHour) {
return Math.round(elapsed/msPerMinute) + ' minutes ago';
}
else if (elapsed < msPerDay ) {
return Math.round(elapsed/msPerHour ) + ' hours ago';
}
else if (elapsed < msPerMonth) {
return 'approximately ' + Math.round(elapsed/msPerDay) + ' days ago';
}
else if (elapsed < msPerYear) {
return 'approximately ' + Math.round(elapsed/msPerMonth) + ' months ago';
}
else {
return 'approximately ' + Math.round(elapsed/msPerYear ) + ' years ago';
}
}
با کمی تغییر میتونید نسخه PHP اون رو هم بسازین. اگه میخواین بصورت لحظه ای باشه، میتونید در فواصل زمانی مشخص (هر 1 دقیقه) دوباره اسکریپت رو صدا بزنید (اگه با PHP نوشتین، با AJAX صداش بزنید).
بسیار عالی تغییرات انجام میدم و php میکنم فقط کار با Ajax هنوز یاد ندارم استاد اگر بخوام هر 1 دقیقه اسکریپت رو صدا بزتم با Ajax در yii چه کدی نیازه ؟
کار خاصی لازم نیست. کافیه یه اکشن بسازین به این شکل:
class SiteController extends Controller
{
public function actionAgo()
{
if(!Yii::app()->request->isAjaxRequest || !isset($_POST['ts'])) {
return;
}
// process $_POST['ts'] and calculate ago time here and ECHO it (don't return or render);
}
}
حالا سمت کلاینت یا چنین کدی میتونید در فواصل زمانی مشخص، ts رو بفرستین و جواب بگیرین:
function Ago() {
$.ajax({
type: "post",
data: "ts=" + $("#ts").attr("id"),
url: "<?php echo Yii::app()->createAbsoluteUrl('site/ago'); ?>",
success: function(result) {
$("#ago").html(result);
}
});
};
setInterval("Ago();", 60000);
سعی کردم سر خط رو بهتون بدم.
ممنون استاد همین سر خط برام کافیه کار کردن با Ajax دیگه با من
انشالله کد ویرایش کردم و اوکی شد میزارم دوستان دیگر هم اگر خواستن استفاده کنند
این هم کد php برای عزیزانی که نیاز به این کد دارند
public function timeDifference($ts) {
$msPerMinute = 60;
$msPerHour = $msPerMinute * 60;
$msPerDay = $msPerHour * 24;
$msPerMonth = $msPerDay * 30;
$msPerYear = $msPerDay * 365;
$elapsed = time() - $ts;
if ($elapsed < $msPerMinute) {
return $elapsed . ' ثانیه پیش';
}
else if ($elapsed < $msPerHour) {
return floor($elapsed/$msPerMinute) . ' دقیقه پیش';
}
else if ($elapsed < $msPerDay ) {
return floor($elapsed/$msPerHour) . ' ساعت پیش';
}
else if ($elapsed < $msPerMonth) {
return floor($elapsed/$msPerDay) . ' روز پیش';
}
else if ($elapsed < $msPerYear) {
return floor($elapsed/$msPerMonth) . ' ماه پیش';
}
else {
return floor($elapsed/$msPerYear) . ' سال پیش';
}
}
کافیه تایم استمپ پست رو بدید به این تابع
برای این کار توی yii یک اکستنشن وجود داره به اسم time ago که یک باگ کوچک داشت که اگر زمان سیستم شما تنظیم نبود در محاسباتش دچار اشتباه میشد. اون رو رفع کردم و به عنوان time ago2 منتشرش کردم. (از مزایاش اینه که اگر یک دقیقه قبل پستی منتشر شده باشه و یک دقیقه به مانیتور نگاه کنید. بعدش خود به خود میشه دو دقیقه قبل، درضمن ajax نیست که بار سرور رو زیاد کنه کد javascript هست)
لینک:
http://www.yiiframework.com/extension/timeago2/