PDA

View Full Version : چطوری یه time back درست کنم ؟



mamali-mohammad
سه شنبه 25 بهمن 1390, 00:12 صبح
سلام
خوبید ؟
من میخوام یه time back درست کنم
به این صورت که از 24:00:00 به عقب بره تا 00:00:00 بشه
اطلاعات باید در دیتابیس ثبت بشه
من الان خودم اینو میزارم روی 24 . از همین الان میخوام برگشت تایم شروع بشه
چطوری این کارو کنم ؟
ممنون

yones_safari
سه شنبه 25 بهمن 1390, 00:16 صبح
به این صورت که از 24:00:00 به عقب بره تا 00:00:00 بشه
اطلاعات باید در دیتابیس ثبت بشه
من الان خودم اینو میزارم روی 24 . از همین الان میخوام برگشت تایم شروع بشه

میشه این سه خط رو یکمی بازتر کنی؟؟؟؟؟

mamali-mohammad
سه شنبه 25 بهمن 1390, 16:16 عصر
ببین داداش جریان این هست :
من یه مطلب در سایت ارسال می کنم
حالا می خوام این مطلب دقیقا 24 ساعت دیگه نمایش داده بشه
حالا میخوام زمانی که ارسال میشه 24 ساعت time بزنه به عقب
از ساعت 24 شروع بشه تا 0 بشه
0 که مطلب نمایش داده بشه

MMSHFE
سه شنبه 25 بهمن 1390, 17:07 عصر
میگم چه کاریه؟ خوب زمان ارسال رو ذخیره کنید (timestamp) و یک فیلد برای نمایش هم بگذارین که اول صفر هست. بعد هربار سایت نمایش داده میشه، اول چک کنید ببینید اون فیلد برای هر مطلب صفره یا نه و اگه صفر بود، ببینید timestamp‌ الآن برابر با (یا بزرگتر از) timestamp مطلب + 86400 هست یا نه و اگه بود، اون فیلد رو 1 کنید (86400 میشه تعداد ثانیه های یک روز). اگر هم یک بود که نمایشش بدین. موفق باشید.

mamali-mohammad
چهارشنبه 26 بهمن 1390, 15:07 عصر
خب چطوری کم میشه ؟
این باید خودش اتوماتیک صفر بشه
میخوام هربار که کاربر وارد شد تایم بزنه :
حدود 1:20:35 تا نمایش مطلب

MMSHFE
چهارشنبه 26 بهمن 1390, 16:36 عصر
جالبه. یه چیزی تو مایه های «به زودی در این مکان مطلب درج خواهد شد» میشه :چشمک:
درهرحال، برای این کاری که شما میخواین انجام بشه، کافیه یک اسکریپت PHP بسازین که شماره مطلب رو میگیره و اگه فیلد نمایش توی مطلب مربوطه صفر بود، timestamp اون مطلب رو از timestamp جاری کم کنه و بصورت ساعت و دقیقه و ثانیه نشون بده. بعد اون رو با AJAX برای نمایش شمارش معکوس فراخوانی کنید. اگر هم میخواین ثابت باشه، کافیه برای اینکار یک تابع بنویسید که شماره مطلب رو بعنوان پارامتر میگیره و هرجا لازم داشتین، اون تابع رو صدا بزنید.
موفق باشید.

mamali-mohammad
چهارشنبه 26 بهمن 1390, 22:50 عصر
ثابت هست
میشه بیشتر توضیح بدید
فرض کنید الان 23:20:18 باشه
خوب این چطوری هر ثانیه کم میشه ؟

MMSHFE
پنج شنبه 27 بهمن 1390, 11:12 صبح
ببینید منظورم از ثابت، اینه که هربار صفحه Refresh میشه، بگه اینقدر زمان دیگه مطلب ظاهر میشه اگر هم زمان نمایش مطلب برسه، اون رو نشون میده و این زمان تا وقتی که صفحه رو Refresh نکنیم، ثابت باشه. متحرک هم یعنی اینکه تایمر معکوس کار میکنه و وقتی به صفر رسید، مطلب ظاهر بشه. حالا شما کدوم رو میخواین؟

mamali-mohammad
پنج شنبه 27 بهمن 1390, 16:32 عصر
همون ثابت رو لازم دارم
با رفرش نشون بده

MMSHFE
پنج شنبه 27 بهمن 1390, 17:42 عصر
با فرض اینکه فیلدهای زیر توی جدولتون هست:
id - شماره ردیف
title - عنوان پست
body - بدنه پست
ctime - زمان ایجاد پست (از نوع int هست و timestamp زمان ذخیره سازی رو توش ذخیره کنید)
display - مشخص کننده نمایش/عدم نمایش پست (از نوع boolean هست و موقع ایجاد پست مقدار صفر بهش بدین)
حالا این تابع رو ببینید:


function display($id) {
if(!is_numeric($id)) {
return;
}
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$id = mysql_real_escape_string((int) $id);
$post = mysql_query("SELECT * FROM `posts` WHERE (`id`='{$id}') ORDER BY `id` LIMIT 1");
if($post && mysql_num_rows($post) == 1) {
$post = mysql_fetch_assoc($post);
if($post['display'] == 1) {
return '<p>'.$post['title'].'</p>'.PHP_EOL.nl2br($post['body']).PHP_EOL;
}
else {
$diff = time() - $post['ctime'];
if($diff >= 86400) {
mysql_query("UPDATE `posts` SET `display`='1' WHERE (`id`='{$id}') ORDER BY `id` LIMIT 1");
return '<p>'.$post['title'].'</p>'.PHP_EOL.nl2br($post['body']).PHP_EOL;
}
else {
$diff = 86400 - $diff;
$h = (int) $diff / 3600;
$diff %= 3600;
$m = (int) $diff / 60;
$diff %= 60;
return "<p>The post will be displayed at about {$h} hour(s), {$m} minute(s) and {$diff} second(s) later.</p>".PHP_EOL;
}
}
}
}

برای نمایش هر پست، کافیه این تابع رو با id اون صدا بزنید. مثالی از نحوه استفاده:


mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$posts = 'SELECT `id` FROM `posts` ORDER BY `id` DESC';
if($posts && mysql_num_rows($posts) > 0) {
while($post = mysql_fetch_assoc($posts)) {
echo '<div>'.PHP_EOL;
display($post['id']);
echo '</div>'.PHP_EOL;
}
mysql_free_result($posts);
}

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

mamali-mohammad
پنج شنبه 27 بهمن 1390, 23:17 عصر
ممنون
اما من نمیدونم چطوری مقدار زمان کم میشه !

MMSHFE
پنج شنبه 27 بهمن 1390, 23:38 عصر
منظورتون رو از اینکه میگین چطوری زمان کم میشه نمیدونم. توی کدی که گذاشتم، ابتدا timestamp زمان جاری با استفاده از تابع time بدست میاد و زمان درج مطلب ازش کم میشه. حالا اگه این زمان بیشتر از 86400 ثانیه بود (یک روز)، اون مطلب رو برای نمایش تعیین میکنه و فیلد display اون رو یک میگذاره. بعد هم نمایشش میده. اما اگه زمان کمتر از این حد بود یعنی اینکه هنوز زمان نمایش مطلب نرسیده و بجای مطلب، با کم کردن اختلاف زمان ایجاد پست تا زمان جاری از 86400، محاسبه میکنه چند ثانیه دیگه تا نمایشش مونده و اون زمان رو نشون میده. البته یک نکته کوچک یعنی همین کم کردن از 86400 یادم رفته بود که توی کد گذاشتم و الآن کدی که گذاشتم درست کار میکنه. موفق باشید.