الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن اجراء هذه العملية ( الباقي من الوقت )

بدأه أبورنه في 27 أغسطس 2010 · 12 رد · 639 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

سؤالي بسيط بإذن الله تعالى

اريد عملية حسابية بسيطة وهي لو قام شخص بإضافة سجل اريد ان يتم اقفال هذا السجل بعد 24 ساعة ( ليس هذا هو المطلوب )

المطلوب هو :

اريد رسالة تظهر كم بقي من ساعة ودقيقة لإقفال السجل ...

حسب وقت اضافته للموضوع يعني اذا اضافة الساعة 11 يحسب حتى الساعة 11 غدا و اذا اضافة الساعة 9 يحسب حتى الساعة 9 غداً وهكذا

اتمنى ان يكون سؤالي واضح

وجزاكم الله خير

#2

اخوي

المطلوب هو :

اريد رسالة echo تظهر كم بقي من ساعة ودقيقة لإقفال السجل ...

حسب وقت اضافته للموضوع يعني اذا اضافة الساعة 11 يحسب حتى الساعة 11 غدا و اذا اضافة الساعة 9 يحسب حتى الساعة 9 غداً وهكذا

مثال :

تاريخ الموضوع : الساعة 10.30

قام بتشغيل الموضوع في الساعة 3 صباحا

ستأتية الرسالة التالية

تاريخ اضافة الموضوع : 10.30

باقي على اقفال الموضوع : 19.5

متغير يكفي اما بالنسبة للسجل والتعامل معه فهو غير مهم بالانسبة لي

تم تعديل هذه المشاركة بواسطة أبورنه في 27 أغسطس 2010 في 16:38

#3

السؤال كان واضح

السجل بقاعدة البيانات؟

وتاريخ كتابتة بقاعدة البيانات؟

//الوقت من قاعدة البيانات
$dbtime=""?
// الوقت المنقضي= الوقت الحالي - وقت التسجيل
$spenttime=time()-$dbtime ;
// الوقت المتبقي =الوقت الحالي + 24 ساعة - وقت التسجيل
remaintime=time()+(24*60)-$dbtime
// اذا فيه اي ملاحضات
#4

الأخ أبورنه،

سؤالي متعلق بنوع السجل، هل هو في قاعدة بيانات؟ تكفيني الإجابة بنعم أو لا حتى أعطيك إجابة دقيقة دون تضييع وقت أحد، كما يحصل الآن.

بالنسبة لما تبحث عنه موضوعه محلول وبسيط، الفكرة باختصار تخزين وقت إنشاء السجل في قاعدة البيانات (بافتراض أنه سجل في قاعدة بيانات)

ومن داخل PHP يتم جلب هذه القيمة وتمريرها لدالة جافاسكربت تقوم بإنشاء عدّاد على الشاشة، لأنها ستكون قادرة على إنشاء عداد نشط طوال الفترة التي تبقى فيها الصفحة مفتوحة بسهولة.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

هاك مثال لما كنت أتكلم عنه بشكل نظري،

<html>
<head>
<style>
body {
	font-size: 20px;
	font-family: 'Segoe UI','Lucida Grande';
}
</style>
</head>
<body>
<u>Time until closed:</u> <script language="JavaScript">
TargetDate = "8/27/2010 20:00";
//TargetDate = <?php echo $targetDate; ?>
BackColor = "white";
ForeColor = "black";
CountActive = true;
CountStepper = -1;
LeadingZero = false;
//DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
DisplayFormat = "%%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
FinishMessage = "It is finally here!";
</script>

<script language="JavaScript">
	function calcage(secs, num1, num2) {
    	s = ((Math.floor(secs / num1)) % num2).toString();
    	if (LeadingZero && s.length < 2) s = "0" + s;
    	return "<b>" + s + "</b>";
	}

	function CountBack(secs) {
    	if (secs < 0) {
        	document.getElementById("cntdwn").innerHTML = FinishMessage;
        	return;
    	}
    	DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs, 86400, 100000));
    	DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs, 3600, 24));
    	DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs, 60, 60));
    	DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs, 1, 60));

    	document.getElementById("cntdwn").innerHTML = DisplayStr;
    	if (CountActive) setTimeout("CountBack(" + (secs + CountStepper) + ")", 

SetTimeOutPeriod);
	}

	function putspan(backcolor, forecolor) {
    	document.write("<span id='cntdwn' style='background-color:" + backcolor + "; color:" 

+ forecolor + "'></span>");
	}

	if (typeof(BackColor) == "undefined") BackColor = "white";
	if (typeof(ForeColor) == "undefined") ForeColor = "black";
	if (typeof(TargetDate) == "undefined") TargetDate = "12/31/2020 5:00 AM";
	if (typeof(DisplayFormat) == "undefined") DisplayFormat = "%%D%% Days, %%H%% Hours, %%

M%% Minutes, %%S%% Seconds.";
	if (typeof(CountActive) == "undefined") CountActive = true;
	if (typeof(FinishMessage) == "undefined") FinishMessage = "";
	if (typeof(CountStepper) != "number") CountStepper = -1;
	if (typeof(LeadingZero) == "undefined") LeadingZero = true;

	CountStepper = Math.ceil(CountStepper);
	if (CountStepper == 0) CountActive = false;
	var SetTimeOutPeriod = (Math.abs(CountStepper) - 1) * 1000 + 990;
	putspan(BackColor, ForeColor);
	var dthen = new Date(TargetDate);
	var dnow = new Date();
	if (CountStepper > 0) ddiff = new Date(dnow - dthen);
	else ddiff = new Date(dthen - dnow);
	gsecs = Math.floor(ddiff.valueOf() / 1000);
	CountBack(gsecs);
</script>
</body>
</html>

ركّز في المتغيرات جيّداً.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#6

صيغة التاريخ التي وضعتها بالسجل هي 1030 او 10:30

#7
أبورنه كتب:

صيغة التاريخ التي وضعتها بالسجل هي 1030 او 10:30

لن يكون من الصعب تعديلها لتكون تاريخ/وقت نظامي دون تخصيصه بهذا الشكل.

حتى تستطيع - على الأقل - استخدام دوال الوقت/التاريخ الجاهزة في PHP معها.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

طيب معليش تحملني

ماهي افضل طريقة لتخزين الوقت والتاريخ بشكل نظامي

#9

تنسيق الوقت والتاريخ الافتراضي في MSSQL/MySQL كافي.

لا أعلم عن باقي قواعد البيانات لأني لا أستخدمها.

فمثلاً التابع NOW() في MySQL/MSSQL يعطيك عند تنفيذه الوقت بالتنسيق التالي،

2010-11-30 10:41:47

وهو كافي للعمل مع السكربت السابق.

لا تنسى أن يكون نوع الحقل في قاعدة البيانات DATETIME حتى يتم تخزين القيمة كاملة.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#10

طيب اخوي

انا جعلت الصيغة لدي 2010-11-30 10:41:47

كيف اطبق عليها المثال

#11
أبورنه كتب:

طيب اخوي

انا جعلت الصيغة لدي 2010-11-30 10:41:47

كيف اطبق عليها المثال

استفد من الكود الذي ذكره لك الأخ atlasarab، وقم بتمرير قيمة $targetDate أو $targettime إلى كود JavaScript الذي كتبته لك في الأعلى من خلال السطر:

TargetDate = <?php echo $targetDate; ?>

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#12

الفكرة لم تتضح لي

الآن انا اي صيغة للتاريخ استخدم

وكيف يمكن عرض التاريخ في النهاية بالساعة والدقيقة واليوم ...

#13
أبورنه كتب:

الفكرة لم تتضح لي

الآن انا اي صيغة للتاريخ استخدم

وكيف يمكن عرض التاريخ في النهاية بالساعة والدقيقة واليوم ...

هاك الكود كاملاً، أتمنى أن تقوم بدراسته حتى تفهم كيف يعمل، خصوصاً الجزء المتعلق بحساب الوقت بالـ PHP وكيفية إسناده لمتغير في JavaScript

<?php
$recordDate			= "2010-08-29 17:45:30";
$expiryDateStamp	= strtotime($recordDate)+(24*3600);
$expiryDate			= date("m/d/Y H:i:s",$expiryDateStamp);
?>
<html>
<head>
<style>
body {
        font-size: 20px;
        font-family: 'Segoe UI','Lucida Grande';
}
</style>
</head>
<body>
<u>Time until closed:</u>
<script language="JavaScript">
//TargetDate = "08/30/2010 17:45:30";
<?php
echo	"TargetDate = \"$expiryDate\";\n";
?>
BackColor = "white";
ForeColor = "black";
CountActive = true;
CountStepper = -1;
LeadingZero = true;
//DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
DisplayFormat = "%%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
FinishMessage = "It is finally here!";
</script>

<script language="JavaScript">
        function calcage(secs, num1, num2) {
        s = ((Math.floor(secs / num1)) % num2).toString();
        if (LeadingZero && s.length < 2) s = "0" + s;
        return "<b>" + s + "</b>";
        }

        function CountBack(secs) {
        if (secs < 0) {
                document.getElementById("cntdwn").innerHTML = FinishMessage;
                return;
        }
        DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs, 86400, 100000));
        DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs, 3600, 24));
        DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs, 60, 60));
        DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs, 1, 60));

        document.getElementById("cntdwn").innerHTML = DisplayStr;
        if (CountActive) setTimeout("CountBack(" + (secs + CountStepper) + ")", SetTimeOutPeriod);
        }

        function putspan(backcolor, forecolor) {
        document.write("<span id='cntdwn' style='background-color:" + backcolor + "; color:" + forecolor + "'></span>");
        }

        if (typeof(BackColor) == "undefined") BackColor = "white";
        if (typeof(ForeColor) == "undefined") ForeColor = "black";
        if (typeof(TargetDate) == "undefined") TargetDate = "12/31/2020 5:00 AM";
        if (typeof(DisplayFormat) == "undefined") DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
        if (typeof(CountActive) == "undefined") CountActive = true;
        if (typeof(FinishMessage) == "undefined") FinishMessage = "";
        if (typeof(CountStepper) != "number") CountStepper = -1;
        if (typeof(LeadingZero) == "undefined") LeadingZero = true;
        CountStepper = Math.ceil(CountStepper);
        if (CountStepper == 0) CountActive = false;
        var SetTimeOutPeriod = (Math.abs(CountStepper) - 1) * 1000 + 990;
        putspan(BackColor, ForeColor);
        var dthen = new Date(TargetDate);
        var dnow = new Date();
        if (CountStepper > 0) ddiff = new Date(dnow - dthen);
        else ddiff = new Date(dthen - dnow);
        gsecs = Math.floor(ddiff.valueOf() / 1000);
        CountBack(gsecs);
</script>
</body>
</html>

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…