زمان سنج در صفحه

farhad110

Member
من کدی میخوام که مدت زمانی رو که در صفحه جاری بودیم حساب کنه و به صورت متغیری به صفحه بعد بفرسته که بتونم ازش استفاده کنم.
لطفا اگر توی php میشه همچین کاری کرد راهنمایی کنین
 

Ocarina

Member
برای این کار باید بری سراغ جاوا اسکریپت...
البته اگه میخوای مقدر زمان حضور رو محاسبه کنی و بعدش ذخیره کنی (مثلاً تو بانک اطلاعاتی) خوب با همین جاوااسکریپت میشه دیگه... مقدار حضور تو متغییر و بعدش پست
 

NabiKAZ

Well-Known Member
سلام ،
من یه javascript timer سرچ کردم اولین نتیجه جواب سوالتون بود. اینکار خیلی سخت نبود!!!

به هر حال شما میتونید از کد زیر استفاده کنید.
فقط کافیه آبجکت theTime رو در فرمی که قراره اطلاعات رو به فایل پاس بده قرار بدی تا مقدار آن که همان زمان باز بودن صفحه است نیز همراه آن پاس داده شود.
البته میتونید اون button های اضافه رو هم حذف کنید و همینطور متد type از آبجکت theTime رو هم hidden کنید که دیده نشه و هر کار دیگه ...
HTML:
<script language="JavaScript">

<!--
// please keep these lines on when you copy the source
// made by: Nicolas - http://www.javascript-page.com

var timerID = 0;
var tStart  = null;

function UpdateTimer() {
   if(timerID) {
      clearTimeout(timerID);
      clockID  = 0;
   }

   if(!tStart)
      tStart   = new Date();

   var   tDate = new Date();
   var   tDiff = tDate.getTime() - tStart.getTime();

   tDate.setTime(tDiff);

   document.theTimer.theTime.value = "" 
                                   + tDate.getMinutes() + ":" 
                                   + tDate.getSeconds();
   
   timerID = setTimeout("UpdateTimer()", 1000);
}

function Start() {
   tStart   = new Date();

   document.theTimer.theTime.value = "00:00";

   timerID  = setTimeout("UpdateTimer()", 1000);
}

function Stop() {
   if(timerID) {
      clearTimeout(timerID);
      timerID  = 0;
   }

   tStart = null;
}

function Reset() {
   tStart = null;

   document.theTimer.theTime.value = "00:00";
}

//-->

</script>
<body onload="Reset()" onunload="Stop()">
<center><form name="theTimer"><table>
   <tr>
      <td colspan=3 align=center>
         <input type=text name="theTime" size=5>
      </td>
   </tr>
   <tr><td></td></tr>
   <tr>
      <td>
         <input type=button name="start" value="Start" onclick="Start()">
      </td>
      <td>
         <input type=button name="stop" value="Stop" onclick="Stop()">
      </td>
      <td>
         <input type=button name="reset" value="Reset" onclick="Reset()">
      </td>
   </tr>
</table></form></center>

تشکر
نبی
 

farhad110

Member
برای این کار باید بری سراغ جاوا اسکریپت...
البته اگه میخوای مقدر زمان حضور رو محاسبه کنی و بعدش ذخیره کنی (مثلاً تو بانک اطلاعاتی) خوب با همین جاوااسکریپت میشه دیگه... مقدار حضور تو متغییر و بعدش پست

اگر ممکنه کدش رو هم لطف کن!
ممنون میشم
 

farhad110

Member
سلام ،
من یه javascript timer سرچ کردم اولین نتیجه جواب سوالتون بود. اینکار خیلی سخت نبود!!!

به هر حال شما میتونید از کد زیر استفاده کنید.
فقط کافیه آبجکت theTime رو در فرمی که قراره اطلاعات رو به فایل پاس بده قرار بدی تا مقدار آن که همان زمان باز بودن صفحه است نیز همراه آن پاس داده شود.
البته میتونید اون button های اضافه رو هم حذف کنید و همینطور متد type از آبجکت theTime رو هم hidden کنید که دیده نشه و هر کار دیگه ...

آقا دمت گرم، کد رو استفاده کردم اما هنوز اون چیزی رو که میخوام روش تست نکردم. کد رو دستکاری میکنم ببینم میشه...
حال دادی
 

NabiKAZ

Well-Known Member
آقا دمت گرم، کد رو استفاده کردم اما هنوز اون چیزی رو که میخوام روش تست نکردم. کد رو دستکاری میکنم ببینم میشه...
حال دادی

خواهش میکنم قابل شما رو نداشت.
تست کن اگر مشکلی بود بگو امیدوارم بتونم کمک کنم.
 

karevan

Member
یه روش دیگه هم داره اونم با php
اینکه تاریخ ورود به صفحه اول رو توی یه فیلد ذخیره کنی و به صفحه دوم بفرستی
حالا توی صفحه دوم هم تاریخ جاری رو میگیری و از تاریخ صفحه قبل که حالا توی یه متغیر ذخیره شده کم می کنی.
به همین سادگی میشه مدت زمانی که کاربر توی صفحه اول بوده رو به دست آورد
البته یه خورده تلرانس داره یعنی در اصل فاصله زمانی بین نمایش داده شدن صفحه اول و نمایش صفحه دوم رو نشون میده
 

farhad110

Member
چرا جواب نداد ؟
الان دقیقا مشکلت چیه ؟

کد استارت تایمر رو که توی onload صفحه میذارم جواب نمیده
اگر هم کد رو دستکاری نکنم، تایمر از 30:00 شروع میشه
به زبون ساده تر هیچ رقمه کدی که دادی، کاری رو که میخوام انجام نمیده (شایدم من نمیتونم باهاش راه بیام)
به هر حال اگر کد دیگه ای داری ممنون میشم که بذاری
موفق باشی
 

farhad110

Member
یه روش دیگه هم داره اونم با php
اینکه تاریخ ورود به صفحه اول رو توی یه فیلد ذخیره کنی و به صفحه دوم بفرستی
حالا توی صفحه دوم هم تاریخ جاری رو میگیری و از تاریخ صفحه قبل که حالا توی یه متغیر ذخیره شده کم می کنی.
به همین سادگی میشه مدت زمانی که کاربر توی صفحه اول بوده رو به دست آورد
البته یه خورده تلرانس داره یعنی در اصل فاصله زمانی بین نمایش داده شدن صفحه اول و نمایش صفحه دوم رو نشون میده

karevan جان ایول که جواب دادی ولی آخه تو خودت باشی این کارو میکنی؟
میدونی چقدر دردسر داره!
فرض کن 9:55 اومدم تو صفحه، 10:24 میرم بیرون. چه جوری میخوای حسابش کنی
این ساعت رو برای مثال گفتم. سخت تر از اینم هست

اگر هم از تابع خاصی استفاده میکنی لطفا واضح تر بگو
 

tabib_m

Member
فرض کن 9:55 اومدم تو صفحه، 10:24 میرم بیرون. چه جوری میخوای حسابش کنی
این ساعت رو برای مثال گفتم. سخت تر از اینم هست
سخت تر از این رو بگو تا برات حلش کنم.
شاید کار این تابع رو بلد نباشی mktime
پیشنهاد میکنم یه نگاه به راهنماش توی php بندازی
ولی در کل ، همچین راه تو دل بروای نیست :)
 

farhad110

Member
سخت تر از این رو بگو تا برات حلش کنم.
شاید کار این تابع رو بلد نباشی mktime
پیشنهاد میکنم یه نگاه به راهنماش توی php بندازی
ولی در کل ، همچین راه تو دل بروای نیست :)
حق با شماست
سخت تر از این هم پیشکش
ولی عزیز دل، شما که لالایی بلدی خوب چرا خوابت نمیبره؟
اگر راه تو دل برو سراغ داری منم ممنون میشم که بگی
 

karevan

Member
یه تابع برات آماده کردم
میشه کاملترش کرد
PHP:
/*
$h /// ساعت
$m // دقیقه
$h1 // ساعت صفحه اول
$m1 // دقیقه صفحه اول
$h2 // ساعت صفحه دوم
$m2 // دقیقه صفحه دوم
*/
function settime($h1,$h2,$m1,$m2){
if($h1==$h2) $h=00;
elseif($h2>$h1)$h=$h2-$h1-1;
////////////////////////////////
$m=$m1+$m2
if($m>60){
$m=$m-60;
$h=$h++;
}
echo $h.":".$m;
}

سخت تر از این رو بگو تا برات حلش کنم.
شاید کار این تابع رو بلد نباشی mktime
پیشنهاد میکنم یه نگاه به راهنماش توی php بندازی
ولی در کل ، همچین راه تو دل بروای نیست

دوست من این روش اطمینان داره ولی جاوا اسکریپت نه.
ضمنا" نیاز نیست این روش توی دل برنامه نویس بره !
اصل نتیجه کاره که باید تو دل بیننده سایت بره
 

NabiKAZ

Well-Known Member
مجبور نیستی با ساعت با فرمت h:m کار کنی!
کافیه از مقدار بازگشتی time() مستقیم استفاده کنی. این تابع زمان رو به ثانیه برمیگردونه و براحتی میتونی تفاضلش رو با عدد قبلی محاسبه کنی . و به ثانیه میزان باقی بودن در صفحه رو حساب کنی.
تبدیلش به دقیقه یا ساعت هم که با یه تقسیم ساده قابل انجامه ...

نبی
 

tabib_m

Member
به خاطر این گفتم تو دل برو نیست چون این زمان در حقیقت مدت زمانی نیست که طرف تو صفحه ی اول بوده
بلکه مدت زمانیه که بین لود صفحه ی اول و لود صفحه ی دوم میگذره ، یعنی سرعت اینترنت هم تو میزان این زمان تأثیر داره و ...
(البته دوستمون هم اشاره کرد)
فکر میکنم اگه با جاواسکریپت انجام بشه ، کمی دقیقتر باشه.
 

NabiKAZ

Well-Known Member
کد استارت تایمر رو که توی onload صفحه میذارم جواب نمیده
اگر هم کد رو دستکاری نکنم، تایمر از 30:00 شروع میشه
به زبون ساده تر هیچ رقمه کدی که دادی، کاری رو که میخوام انجام نمیده (شایدم من نمیتونم باهاش راه بیام)
به هر حال اگر کد دیگه ای داری ممنون میشم که بذاری
موفق باشی


من یه تغییر کوچولو توش دادم .
HTML:
<body>
<center><form name="theTimer"><table>
   <tr>
      <td align=center>
         <input type=text name="theTime" size=5>
      </td>
   </tr>
   <tr><td></td></tr>
   </table></form></center>




<script language="JavaScript">

<!--
// please keep these lines on when you copy the source
// made by: Nicolas - http://www.javascript-page.com

var timerID = 0;
var tStart  = null;

function UpdateTimer() {
   if(timerID) {
      clearTimeout(timerID);
      clockID  = 0;
   }

   if(!tStart)
      tStart   = new Date();

   var   tDate = new Date();
   var   tDiff = tDate.getTime() - tStart.getTime();

   tDate.setTime(tDiff);

   document.theTimer.theTime.value = "" 
                                   + tDate.getMinutes() + ":" 
                                   + tDate.getSeconds();
   
   timerID = setTimeout("UpdateTimer()", 1000);
}

function Start() {
   tStart   = new Date();

   document.theTimer.theTime.value = "00:00";

   timerID  = setTimeout("UpdateTimer()", 1000);
}

function Stop() {
   if(timerID) {
      clearTimeout(timerID);
      timerID  = 0;
   }

   tStart = null;
}

function Reset() {
   tStart = null;

   document.theTimer.theTime.value = "00:00";
}
Start()
//-->

</script>

فقط چند نکته رو زمان اضافه کردن این کد به سایتت دقت کن.
- بخش کدهای جاوا رو بعد از کد html تعریف کننده آبجکت thetimer قرار بده (میتونی برای اطمینان در انتهای کدهات استفاده کنی)
- حتما اسم فرمت باید theTimer باشه.
- تکست باکست رو درون form مورد نظر که قراره رفرش بده قرار بده و type=hidden قرار بده تا دیده نشه.

امیدوارم مشکلت حل بشه
نبی
 

جدیدترین ارسال ها

بالا