PDA

View Full Version : حرفه ای: نحوه ساخت تابع معکوس



محمد گلشن
شنبه 29 بهمن 1390, 11:30 صبح
با سلام خدمت شما دوستان می خواستم بدونم چطور می تونم یک تایمر معکوس داشته باشم مثل سایت http://www.persiangulfcup.org/pages که به صورت دستی ماه , روز , ساعت , دقیقه و ثانیه رو بهش بدم و خودش به طور اتوماتیک ماه , روز , ساعت , دقیقه و ثانیه رو معکوس کنه و هر وقت به صفر رسید یه مقداری رو مبنی بر صفر شدن تایمر به من برگردونه .

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

mohsen24000
شنبه 29 بهمن 1390, 13:52 عصر
این کدهای جاوا اسکریپتشه...


var r_day = 0, r_hour = 0, r_min = 0, r_sec = 0; $(document).ready(function () { r_day = $('.ReaminingTime_Day').html(); r_hour = $('.ReaminingTime_Hour').html(); r_min = $('.ReaminingTime_Minutes').html(); r_sec = $('.ReaminingTime_Second').html(); $('.Timer').css('display', 'block'); var temp = setTimeout('refreshTimer();', 1000); }); function refreshTimer() { var temp = setTimeout('refreshTimer();', 1000); if (r_sec > 0) { r_sec--; } else { r_sec = 59; if (r_min > 0) { r_min--; } else { r_min = 59; if (r_hour > 0) { r_hour--; } else { r_hour = 59; if (r_day > 0) { r_day--; } } } } $('.ReaminingTime_Day').html(r_day); $('.ReaminingTime_Hour').html(r_hour); $('.ReaminingTime_Second').html(r_sec); $('.ReaminingTime_Minutes').html(r_min); }
کدهای html مربوطه هم که داخل سورس صفحه مشخصه!

محمد گلشن
یک شنبه 30 بهمن 1390, 09:44 صبح
این کدهای جاوا اسکریپتشه...


var r_day = 0, r_hour = 0, r_min = 0, r_sec = 0; $(document).ready(function () { r_day = $('.ReaminingTime_Day').html(); r_hour = $('.ReaminingTime_Hour').html(); r_min = $('.ReaminingTime_Minutes').html(); r_sec = $('.ReaminingTime_Second').html(); $('.Timer').css('display', 'block'); var temp = setTimeout('refreshTimer();', 1000); }); function refreshTimer() { var temp = setTimeout('refreshTimer();', 1000); if (r_sec > 0) { r_sec--; } else { r_sec = 59; if (r_min > 0) { r_min--; } else { r_min = 59; if (r_hour > 0) { r_hour--; } else { r_hour = 59; if (r_day > 0) { r_day--; } } } } $('.ReaminingTime_Day').html(r_day); $('.ReaminingTime_Hour').html(r_hour); $('.ReaminingTime_Second').html(r_sec); $('.ReaminingTime_Minutes').html(r_min); }
کدهای html مربوطه هم که داخل سورس صفحه مشخصه!

دوست عزیز ممنون از کمکتون اما می خواستم بدونم تاریخی که در این کد شما نوشتی بر اساس زمان سیستمه کاربره یا زمان سیستم سرور , من می خواستم زمان سرور رو بدست بیارم و این عملیات رو انجام بدم که برای تمام سیستم های کاربران تایم یکسانی رو داشته باشم

MMSHFE
یک شنبه 30 بهمن 1390, 11:01 صبح
خوب خیلی راحت میتونید یک فایل PHP بنویسید که زمان سرور رو برمیگردونه و بعد با جاوا اسکریپت و به روش AJAX اون رو صدا بزنید و خروجی اون یعنی ساعت سرور رو دریافت و پردازش کنید. موفق باشید.

محمد گلشن
پنج شنبه 04 اسفند 1390, 15:04 عصر
خوب خیلی راحت میتونید یک فایل PHP بنویسید که زمان سرور رو برمیگردونه و بعد با جاوا اسکریپت و به روش AJAX اون رو صدا بزنید و خروجی اون یعنی ساعت سرور رو دریافت و پردازش کنید. موفق باشید.
عزیز مقاله ای ندارین که در رابطه با تاریخ در پی اچ پی کار شده باشه . من می خوام کد مربوط به اختلاف زمانی بین دو تاریخ و همینطور اینکه می خوام بدونم تاریخی که من وارد می کنم آیا بین دو تاریخ دیگر موجود است یا نه . اگه کدش رو می تونید برای استفاده عموم قرار بدین اگه هم نه مقاله ای یا چیزی که من بتونم روش کار کنم اگه بدین ممنون می شم

MMSHFE
پنج شنبه 04 اسفند 1390, 15:16 عصر
دوست عزیز، کافیه با تابع strtotime تاریخی که برای شروع و پایان دارین رو به timestamp تبدیل کنید و با تاریخ امروز که با استفاده از تابع time بدست آوردین، مقایسه کنید. اگه خروجی تابع time بین دو عدد شروع و پایان باشه یعنی بین دو تاریخ قرار داریم. اینجا (http://www.if-not-true-then-false.com/2010/php-calculate-real-differences-between-two-dates-or-timestamps/) رو ببینید.

محمد گلشن
جمعه 05 اسفند 1390, 13:35 عصر
با سلام خدمت شما دوست عزیز بنده کدی رو پیدا کردم که فاصله زمانی بین دو تاریخ رو به صورت ماه , ساعت روز دقیقه به من میده اما می خوام بدونم چطوری می تونم با Ajax این رو ثانیه به ثانیه معکوسش کنم کدش اینه





<?php
// Set timezone
date_default_timezone_set("UTC");
// Time format is UNIX timestamp or
// PHP strtotime compatible strings
function dateDiff($time1, $time2, $precision = 6) {
// If not numeric then convert texts to unix timestamps
if (!is_int($time1)) {
$time1 = strtotime($time1);
}
if (!is_int($time2)) {
$time2 = strtotime($time2);
}

// If time1 is bigger than time2
// Then swap time1 and time2
if ($time1 > $time2) {
$ttime = $time1;
$time1 = $time2;
$time2 = $ttime;
}

// Set up intervals and diffs arrays
$intervals = array('year','month','day','hour','minute','second ');
$diffs = array();

// Loop thru all intervals
foreach ($intervals as $interval) {
// Set default diff to 0
$diffs[$interval] = 0;
// Create temp time from time1 and interval
$ttime = strtotime("+1 " . $interval, $time1);
// Loop until temp time is smaller than time2
while ($time2 >= $ttime) {
$time1 = $ttime;
$diffs[$interval]++;
// Create new temp time from time1 and interval
$ttime = strtotime("+1 " . $interval, $time1);
}
}

$count = 0;
$times = array();
// Loop thru all diffs
foreach ($diffs as $interval => $value) {
// Break if we have needed precission
if ($count >= $precision) {
break;
}
// Add value and interval
// if value is bigger than 0
if ($value > 0) {
// Add s if value is not 1
if ($value != 1) {
$interval .= "s";
}
// Add value and interval to times array
$times[] = $value . " " . $interval;
$count++;
}
}

// Return string with times
return implode(", ", $times);
}

echo dateDiff("2009-01-26", "2009-01-27 15:38:11") . "\n";?>


دوست عزیز در ضمن من با تابع آژاکس jquery آشنا هستم میشه به من بگید چطوری می تونم با این تابع این کار رو انجام بدم



$.ajax({
type: 'POST', url: "index.php", async: true, cache: false, data: "",
success: function (data) {
},
error: function (data) {}
});

MMSHFE
جمعه 05 اسفند 1390, 17:46 عصر
اون کد اختلاف بین دو تاریخ رو نشون میده. شما تاریخهای شروع و پایان رو چطوری ذخیره کردین؟ یک نمونه بگذارین تا بگم چطوری متوجه بشین که درحال حاضر بین دو تاریخ مذکور هستیم یا نه؟

محمد گلشن
جمعه 05 اسفند 1390, 19:37 عصر
اون کد اختلاف بین دو تاریخ رو نشون میده. شما تاریخهای شروع و پایان رو چطوری ذخیره کردین؟ یک نمونه بگذارین تا بگم چطوری متوجه بشین که درحال حاضر بین دو تاریخ مذکور هستیم یا نه؟
سلام . دوست عزیز بنده زمان شروع بازی و پایان بازی رو به صورت میلادی در بانک ذخیره می کنم مثلا شروع بازی
12:30:00 2010-04-12 و پایان بازی 14:00:00 12-04-2010 حالا به قول شما یه تابعی باید باشه که اولا زمان جاری سرور رو بگیره و ببینه آیا بین این دو زمان هست یا نه , اگه بود فیلد وضیعت رو false کنه و تایمری که در صفحه اصلی روز , ساعت , ماه و ثانیه رو نشون میده رو باید متوقف کنه یا صفر کنه و اگه نبود زمان باقی مانده تا شروع بازی رو به صورت روز , ساعت , دقیقه و ثانیه که لحظه به لحظه در حال کم شدن هست در صفحه اصلی نشان بده .
خیلی معذرت می خوام که توقع بی جا دارم اما شدیدا به کد این الگوریتم احتیاج دارم اگه عنایت کنید ممنون میشم

farhadfery
جمعه 05 اسفند 1390, 20:04 عصر
خوب خیلی راحت میتونید یک فایل PHP بنویسید که زمان سرور رو برمیگردونه و بعد با جاوا اسکریپت و به روش AJAX اون رو صدا بزنید و خروجی اون یعنی ساعت سرور رو دریافت و پردازش کنید. موفق باشید.
سلام. همینطور که استاد MMSHFE فرمودند عمل کنید. چرا کار را می پیچونید؟ اگر با ajax هم نمی خواهی عمل کنید. برای استفاده از زمان سرور در js یکجایی در بین کدهای js تایم را echo کن بریز تو یه متغییر. همین.
var time = <?php echo time(); ?>

MMSHFE
جمعه 05 اسفند 1390, 20:22 عصر
با سلام، این کد رو ببینید:


$start = '2010-04-12 12:30:00';
$end = '2010-04-12 14:00:00';
$t1 = strtotime($start);
$t2 = strtotime($end);
$now = time();
echo ($now >= $t1 && $now <= $t2) ? 'Yes' : 'No';

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

محمد گلشن
شنبه 06 اسفند 1390, 00:50 صبح
سلام آقا خیلی ممنون زحمت کشیدین تا حدوده زیادی مشکلم حل شده فقط یک چیزی همون تابعی که تو قسمت اول گذاشتم و گفتید که اختلاف زمانی رو حساب می کنه و به صورت روز و ساعت و دقیقه و ثانیه نشون می دهد اگه بخوام با آژاکس jquery اونو لحظه به لحظه صدا بزنم کدش چی میشه .

MMSHFE
شنبه 06 اسفند 1390, 15:43 عصر
تفاوت زیادی پیدا نمیکنه. فقط باید time1 رو از دیتابیس بخونید (زمان شروع) و time2 رو با استفاده از تابع ()time محاسبه کنید (زمان فعلی) و بعد، این دو زمان رو بعنوان پارامتر برای تابع مذکور بفرستین و خروجی اون رو echo کنید. سمت کاربر هم با setTimeout در JS هر 1 ثانیه اسکریپت مذکور رو با jquery.ajax یا ajax.$ فراخوانی کنید و خروجی اون رو در محل موردنظر از صفحه، نشون بدین.